diff --git a/.eslintignore b/.eslintignore index 502167fa0..5b7afd827 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1,2 @@ /lib +monorepo-merge-reports.js diff --git a/.eslintrc.js b/.eslintrc.js index 2763e8126..4c32d45a4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,7 +2,7 @@ module.exports = { parser: '@typescript-eslint/parser', // Specifies the ESLint parser extends: [ 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin - 'prettier/@typescript-eslint', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier + 'prettier', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier 'plugin:prettier/recommended', // Enables eslint-plugin-prettier and eslint-config-prettier. This will display prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. ], parserOptions: { diff --git a/.gitignore b/.gitignore index a4254d96b..7dadbb5aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,22 +1,17 @@ -*-debug.log -*-error.log -/.nyc_output -/dist -/lib -/tmp -/yarn.lock -node_modules -/target/ +**/.nyc_output +**/dist +**/lib +**/tmp +**/yarn.lock +**/node_modules +**/logs.log +packages/*/target /.idea/ -/logs.log -symbol-bootstrap-*.tgz -/.eslintcache -coverage -/ts-docs/ -/oclif.manifest.json -/ngrok-testnet.yml -/boat.png -/agent-linux.bin -/privateSeeds/ -/test/service/logs.log -/backup-sync/ +**/symbol-*.tgz +**/.eslintcache +**/coverage +**/ts-docs/ +**/oclif.manifest.json +**/boat.png +**/agent-linux.bin +/test-space/ diff --git a/.prettierignore b/.prettierignore index e4b38f399..174eaecbc 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,2 @@ -/test/reports/**/*.json +/**/test/expectedTargets/** +/**/package-lock.json diff --git a/.travis.yml b/.travis.yml index 15ec56129..2b8e588f4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,16 +19,17 @@ cache: - node_modules - .eslintcache before_script: + - npm run init - sudo rm /usr/local/bin/docker-compose - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose - chmod +x docker-compose - sudo mv docker-compose /usr/local/bin - . ./travis/node-functions.sh - VERSION="$(node_load_version)" - - if [[ ! -z "$DOCKER_USERNAME" ]] ; then echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin; fi + - if [[ ! -z "$DOCKER_PASSWORD" ]] ; then echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin; fi - log_env_variables script: - - npm pack + - npm run build - npm test - npm run coveralls-report jobs: diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f382f274..6cd749db9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,14 +4,20 @@ All notable changes to this project will be documented in this file. The changelog format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [1.0.8] - NEXT +## [1.1.0] - NEXT **Milestone**: Mainnet(1.0.1.0) -| Package | Version | Link | -| ---------------- | ------- | ------------------------------------------------------------------ | -| Symbol Bootstrap | v1.0.8 | [symbol-bootstrap](https://www.npmjs.com/package/symbol-bootstrap) | +| Package | Version | Link | +| --------------------- | ------- | ------------------------------------------------------------------ | +| Symbol Bootstrap | v1.1.0 | [symbol-bootstrap](https://www.npmjs.com/package/symbol-bootstrap) | +| Symbol Bootstrap Core | v1.1.0 | [symbol-bootstrap](https://www.npmjs.com/package/symbol-bootstrap) | +| Symbol Network | v0.0.1 | [symbol-bootstrap](https://www.npmjs.com/package/symbol-bootstrap) | +| Symbol Network Core | v0.0.1 | [symbol-bootstrap](https://www.npmjs.com/package/symbol-bootstrap) | +- The `bootstrap` preset is not the default anymore. The name must be provided via --preset or as a custom preset field. +- When upgrading, the --customPreset param is now only required if there is a configuration change, since + the properties from the original custom preset are fully cached in the target folder. - Added `wizard` command. - Added `pack` command. @@ -38,7 +44,7 @@ The changelog format is based on [Keep a Changelog](https://keepachangelog.com/e - Symbol Rest `2.3.6` upgrade. - Reward Program Agent `2.0.0` upgrade. - Added `MonitorOnly` reward program. -- The `link` and `enrollRewardProgram` commands allow `--customPreset` to avoid password prompt when main private key is not stored in the target folder. +- The `link` and `enrollRewardProgram` commands allow `--customPreset` to avoid password prompt when main private key is not stored in the target folder. - Merged tools and server docker images into one. ## [1.0.5] - May-3-2021 @@ -67,7 +73,7 @@ The changelog format is based on [Keep a Changelog](https://keepachangelog.com/e - Fixed case issue validating keys when creating certificates. - Updated Wallet to latest 1.0.1 release. - Node properties sinkType: Async and enableSingleThreadPool: false by default in peer nodes too. -- Dropped NodeJS 10 support. Added Node LTS and Stable Support. +- Dropped NodeJS 10 support. Added Node LTS and Stable Support. ## [1.0.3] - Mar-31-2021 @@ -102,7 +108,7 @@ The changelog format is based on [Keep a Changelog](https://keepachangelog.com/e - Random and limited peer/api list. - Custom `votingUnfinalizedBlocksDuration` and `nonVotingUnfinalizedBlocksDuration` preset properties. -- Agent service is disabled until supernode program resumes. +- Agent service is disabled until supernode program resumes. - The default `beneficiaryAddress` is the node's main address. Use `beneficiaryAddress: ''` in a custom preset to override the new default. ## [1.0.0] - Mar-16-2021 @@ -116,7 +122,7 @@ The changelog format is based on [Keep a Changelog](https://keepachangelog.com/e - **New `mainnet` preset!!!** - Removed node from its own `peers-p2p.json` and `peers-api.json` files. - Voting keys are ephemeral. They cannot be provided, bootstrap will always generate a new one when resetting the configuration. Bootstrap will never store the voting private key in addresses.yml. -- Dropped `PROMPT_MAIN_VOTING` from `privateKeySecurityMode`. +- Dropped `PROMPT_MAIN_VOTING` from `privateKeySecurityMode`. - Added `PROMPT_MAIN_TRANSPORT` to `privateKeySecurityMode`: The transport/node key will be asked when regenerating the certificates or when upgrading a supernode. - Changed server file permission to 0o600 @@ -129,17 +135,17 @@ The changelog format is based on [Keep a Changelog](https://keepachangelog.com/e | Symbol Bootstrap | v0.4.5 | [symbol-bootstrap](https://www.npmjs.com/package/symbol-bootstrap) | - Added `privateKeySecurityMode`. It defines which private keys can be encrypted and stored in the `target/addresses.yml`: - - `ENCRYPT`: All private keys are encrypted and stored in the target's `addresses.yml` file. Bootstrap will require a password to operate. - - `PROMPT_MAIN`: Main private keys are not stored in the target's `addresses.yml` file. Bootstrap will request the main private key when certificates are generated, or transactions need to be signed by the `link` and `enrolProgram` commands. - - `PROMPT_MAIN_VOTING`: Main and voting private keys are not stored in the target's `addresses.yml` file. Bootstrap will request the main private key when certificates are generated, or transactions need to be signed by the `link` and `enrolProgram` commands. The voting private key will be requested when generating the voting key file. - - `PROMPT_ALL`: No private keys are stored in the in the target's `addresses.yml` file. Bootstrap will request the private keys when they are required by the different commands. + - `ENCRYPT`: All private keys are encrypted and stored in the target's `addresses.yml` file. Bootstrap will require a password to operate. + - `PROMPT_MAIN`: Main private keys are not stored in the target's `addresses.yml` file. Bootstrap will request the main private key when certificates are generated, or transactions need to be signed by the `link` and `enrolProgram` commands. + - `PROMPT_MAIN_VOTING`: Main and voting private keys are not stored in the target's `addresses.yml` file. Bootstrap will request the main private key when certificates are generated, or transactions need to be signed by the `link` and `enrolProgram` commands. The voting private key will be requested when generating the voting key file. + - `PROMPT_ALL`: No private keys are stored in the in the target's `addresses.yml` file. Bootstrap will request the private keys when they are required by the different commands. - The `preset.yml` doesn't contain any private key anymore, encrypted or otherwise. - Certificates are not re-generated if not needed when running `--upgrade`. In this case, the main account private key is not required and will not be requested with the `PROMPT` security modes. - Voting key files are not re-generated if not needed when running `--upgrade`. In this case, the voting account private key is not required and will not be requested with the `PROMPT_ALL` or `PROMPT_MAIN_VOTING` security modes. - Public keys can be used in custom presets in addition to encrypted private keys. If public keys are used, Bootstrap will prompt for the private keys when required. - Added `encrypt` and `decrypt` commands to encrypt custom presets and decrypt generated `target/addresses.yml` files: - The `--upgrade` param can be used to change the server keys without dropping the data. -- Splitting `userconfig` into `server-config` and `broker-config` for each service. +- Splitting `userconfig` into `server-config` and `broker-config` for each service. - Fixed recovery process. ## [0.4.4] - Feb-24-2021 @@ -164,9 +170,9 @@ The changelog format is based on [Keep a Changelog](https://keepachangelog.com/e - Added Core Dump files when `dockerComposeDebugMode: true`. - Added autocomplete support. Try `symbol-bootstrap autocomplete` and follow the instructions (Thanks @44uk). -- Renamed `supernode` keywords for `rewardProgram` for clarification. Supernode is a type of Reward Program. +- Renamed `supernode` keywords for `rewardProgram` for clarification. Supernode is a type of Reward Program. - Voting is not required to enrol a program. -- Renamed command from `enrolSupernode` for `enrolRewardProgram`. +- Renamed command from `enrolSupernode` for `enrolRewardProgram`. - Added preset configurable `connectionPoolSize` to the Rest Gateway configuration. - Removed Node Key Link transactions from nemesis and `link` command. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 94f18eebe..07d337525 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -82,4 +82,4 @@ Then sit back and wait. There will probably be discussion about the pull request *CONTRIBUTING.md is based on [CONTRIBUTING-template.md](https://github.com/nayafia/contributing-template/blob/master/CONTRIBUTING-template.md)* , [elasticsearch/CONTRIBUTING](https://github.com/elastic/elasticsearch/blob/master/CONTRIBUTING.md) and [spark/CONTRIBUTING](https://github.com/apache/spark/blob/master/CONTRIBUTING.md) [pull-request]: https://help.github.com/articles/about-pull-requests/ -[github-issues]: https://github.com/nemtech/symbol-bootstrap/issues +[github-issues]: https://github.com/symbol/symbol-bootstrap/issues diff --git a/README.md b/README.md index a99217a89..835e3c398 100644 --- a/README.md +++ b/README.md @@ -1,301 +1,136 @@ # symbol-bootstrap -Symbol CLI tool that allows you creating, configuring and running Symbol's complete networks or nodes to be sync with existing networks. +Welcome to Symbol's Bootstrap libraries and tools. [![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io) [![Version](https://img.shields.io/npm/v/symbol-bootstrap.svg)](https://npmjs.org/package/symbol-bootstrap) [![Downloads/week](https://img.shields.io/npm/dw/symbol-bootstrap.svg)](https://npmjs.org/package/symbol-bootstrap) -[![License](https://img.shields.io/npm/l/symbol-bootstrap.svg)](https://github.com/nemtech/symbol-bootstrap/blob/master/package.json) -[![Build Status](https://travis-ci.com/nemtech/symbol-bootstrap.svg?branch=main)](https://travis-ci.com/nemtech/symbol-bootstrap) -[![Coverage Status](https://coveralls.io/repos/github/nemtech/symbol-bootstrap/badge.svg?branch=main)](https://coveralls.io/github/nemtech/symbol-bootstrap?branch=main) +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +[![Build Status](https://travis-ci.com/symbol/symbol-bootstrap.svg?branch=main)](https://travis-ci.com/symbol/symbol-bootstrap) +[![Coverage Status](https://coveralls.io/repos/github/symbol/symbol-bootstrap/badge.svg?branch=main)](https://coveralls.io/github/symbol/symbol-bootstrap?branch=main) +[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/) [![Api Doc](https://img.shields.io/badge/api-doc-blue.svg)](https://nemtech.github.io/symbol-bootstrap/) - -* [symbol-bootstrap](#symbol-bootstrap) -* [Why this tool?](#why-this-tool) -* [Key benefits:](#key-benefits) -* [Concepts](#concepts) -* [Requirements](#requirements) -* [Usage](#usage) -* [General Usage](#general-usage) -* [Wizard](#wizard) -* [E2E Testing support](#e2e-testing-support) -* [Development](#development) -* [Commands](#commands) -* [Command Topics](#command-topics) - +The solution is split in 2 main products. -# Why this tool? +- **Bootstrap:** To create and manage individual Symbol nodes for existing or new simple networks. +- **Network:** To create and manage "clusters" of Symbol nodes for existing or new networks. -This tool has been created to address the problems defined in Symbol's [NIP11](https://github.com/nemtech/NIP/blob/main/NIPs/nip-0011.md). +Each solution has a "core" library version, and a cli tool. Most people would use the cli tool but if you want to code your own Typescript/Javascript solution you can depend on the "core" libraries. -It replaces: +## Symbol Bootstrap CLI -- [catapult-service-bootstrap](https://github.com/nemtech/catapult-service-bootstrap) -- [symbol-testnet-bootstrap](https://github.com/nemgrouplimited/symbol-service-bootstrap) +The **classic CLI** solution to configure and manage single nodes. It's the cli of the `symbol-bootstrap-core` module. -# Key benefits: +### When to use this package? -- It's an installable cli tool. It's not a repo you need to clone and compile. -- The configuration is parametrized via CLI commands and presets instead of by changing properties files. -- The tools code is unique for any type of network, new networks or nodes in a network. It doesn't need to be copied and pasted in different projects or assemblies. -- The config command runs on the host machine, not via docker making it easier to debug or tune -- It's uses the TS SDK for key generation, vrf transactions, address generation instead of using catapult-tools (nemgen is still used to generate the nemesis block). -- Easier to maintain, the properties files are reused for all nodes, assemblies and network types. -- Network setup (how many database, nodes, rest gateways to run) is defined in presets, users can provide their own ones. -- Docker-compose yaml files are generated based on the network setup/preset instead of being manually created/upgraded. -- The created network (config, nemesis and docker-compose) can be zipped and distributed for other host machines to run it. -- The used docker images versions can be changed via configuration/preset -- It uses the [oclif](https://oclif.io) framework. New commands are easy to add and document. -- It can be included as a npm dependency for clients' e2e testing. +- If you are new to Symbol and want to run and manage your first node. [**Start here!**](./packages/bootstrap-cli) +- If you are creating a running a single node connected to a known public network (Testnet, Mainnet) or a private network. +- To create an individual private network node for demonstration purposes. +- For general e2e tests where you are not using Typescript/Javascript, or you just want to run a network with bash scripts. +- To quickly run your own Web Wallet, Faucet or Explorer services. -# Concepts +Find more in the [bootstrap-cli](packages/bootstrap-cli) submodule. -## Preset: +## Symbol Network CLI -Yaml files that define the configuration and layout of the network and nodes. It defines how many nodes, database, rest gateways, the modes, keys, etc. +Cli tool to create and manage clusters of nodes. It's the cli of the `symbol-network-core` module. The cli tool handles the creation and distribution of the nemesis block when creating a new multinode deployment network. -Presets are defined at 4 levels from general to specific: +### When to use this package? -- Shared: Default configurations for all the networks. -- Network: It defines the main preset of a given network, example: `bootstrap` or `testnet`. -- Assembly: It defines a modification of a network, example: `testnet peer`, `tesnet dual`, `testnet api`. Assembly is required for some networks (like `testnet`). -- Custom: A user provided yml file (`--customPreset` param) that could override some or all properties in the out-of-the-box presets. +- If you are creating your own private network with multiple independent nodes, a second Testnet, or Devnet from scratch. +- If you are creating a cluster of nodes for an existing network like Mainnet, Testnet or any other existing Private Network. -Properties in each file override the previous values (by object deep merge). +Find more in the [network-cli](packages/network-cli) submodule. -### Out-of-the-box presets: +## Symbol Bootstrap Core -- `-p bootstrap`: Default [preset](https://github.com/nemtech/symbol-bootstrap/blob/main/presets/bootstrap/network.yml). It's a private network with 1 mongo database, 2 peers, 1 api and 1 rest gateway. Nemesis block is generated. -- `-p bootstrap -a light`: A [light](https://github.com/nemtech/symbol-bootstrap/blob/main/presets/bootstrap/assembly-light.yml) network. It's a version of bootstrap preset with 1 mongo database, 1 dual peer and 1 rest gateway. Great for faster light e2e automatic testing. Nemesis block is generated. -- `-p bootstrap -a full`: A [full](https://github.com/nemtech/symbol-bootstrap/blob/main/presets/bootstrap/assembly-full.yml) network. The default bootstrap preset plus 1 wallet, 1 explorer and 1 faucet. Great for demonstration purposes. Nemesis block is generated. -- `-p testnet -a peer`: A [harvesting](https://github.com/nemtech/symbol-bootstrap/blob/main/presets/testnet/assembly-peer.yml) peer node that connects to the current public [testnet](https://github.com/nemtech/symbol-bootstrap/blob/main/presets/testnet/network.yml). [Nemesis block](https://github.com/nemtech/symbol-bootstrap/tree/main/presets/testnet/seed/00000) is copied over. -- `-p testnet -a api`: A [api](https://github.com/nemtech/symbol-bootstrap/blob/main/presets/testnet/assembly-api.yml) peer node that connects to the current public [testnet](https://github.com/nemtech/symbol-bootstrap/blob/main/presets/testnet/network.yml) running its own mongo database and rest gateway. [Nemesis block](https://github.com/nemtech/symbol-bootstrap/tree/main/presets/testnet/seed/00000) is copied over. -- `-p testnet -a dual`: A [dual](https://github.com/nemtech/symbol-bootstrap/blob/main/presets/testnet/assembly-dual.yml) haversting peer node that connects to the current public [testnet](https://github.com/nemtech/symbol-bootstrap/blob/main/presets/testnet/network.yml) running its own mongo database and rest gateway. [Nemesis block](https://github.com/nemtech/symbol-bootstrap/tree/main/presets/testnet/seed/00000) is copied over. +Library to create and manage individual Symbol nodes. -### Custom preset: +### When to use this package? -It's the way you can tune the network without modifying the code. It's a yml file (`--customPreset` param) that could override some or all properties in the out-of-the-box presets. +- If you are coding your own configurator or deployment solution in Typescript/Javascript. +- For Typescript/Javascript e2e tests where your test cases configure and run a Symbol node to work with. -Custom presets give Symbol Bootstrap its versatility. Check out the custom preset [guides](docs/presetGuides.md)! +Find more in the [bootstrap-core](packages/bootstrap-core) submodule. -## Target: +## Symbol Network Core -The folder where the generated config, docker files and data are stored. The folder structure is: +Library to create and manage clusters of Symbol nodes. The library handles the creation and distribution of the nemesis block when creating a new multinode deployment network. -- `./preset.yml`: the final generated preset.yml that it's used to configure bootstrap, the nodes, docker, etc. -- `./addresses.yml`: randomly generated data that wasn't provided in the preset. e.g.: SSL keys, nodes' keys, nemesis accounts, generation hash seed, etc. -- `./nodes`: it holds the configuration, data and logs for all the defined node instances. -- `./gateways`: it holds the configuration and logs for all the defined node rest gateways. -- `./nemesis`: The folder used to hold the nemesis block. Block 1 data is generated via `nemgen` tool for new networks. For existing network, it is copied over. -- `./databases`: the location where the mongo data is stored for the different database instances. -- `./docker`: the generated docker-compose.yml, mongo init scripts and server basic bash scripts. -- `./reports`: the location of the generated reports. +### When to use this package? -# Requirements +- If you are coding your own cluster configuration and deployment solution in Typescript/Javascript. One example could be a UI application for creation and deployment of Symbol networks. -- Node 12.0.0+ -- Docker 18.3.0+ -- Docker Compose 1.25.0+ +Find more in the [network-core](packages/network-core) submodule. -Validate your environment by running: +# Contributing -``` -symbol-bootstrap verify -``` +Please read our [contribution guidelines](./CONTRIBUTING.md) before getting started. -Check your user can run docker without sudo: +Note: cloning this repo is only for people that want to tune the tools and libraries in a way it cannot be configured. If this is your case, please provide a feature request. +General users should install the tools and libraries like any other node module. -``` -docker run hello-world -``` - -If you see an error like: - -``` -Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock -``` +## Requirements -Please follow this [guide](https://www.digitalocean.com/community/questions/how-to-fix-docker-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket). - -# Usage - -It's recommended to run the commands from en empty working dir. - -The network configuration, data and docker files will be created inside the target folder ('./target') by default. - -``` -mkdir my-networks -cd my-networks -``` - -Once in the working dir: - - -```sh-session -$ npm install -g symbol-bootstrap -$ symbol-bootstrap COMMAND -running command... -$ symbol-bootstrap (-v|--version|version) -symbol-bootstrap/1.0.8 linux-x64 node-v12.22.1 -$ symbol-bootstrap --help [COMMAND] -USAGE - $ symbol-bootstrap COMMAND -... -``` - +- Node 12.0.0+ +- Docker 18.3.0+ +- Docker Compose 1.25.0+ -# General Usage +This repository is a multimodule/singlerepo project powered by [Lerna](https://github.com/lerna/lerna). -The general usage would be: +## Install dependencies ``` -symbol-bootstrap config -p bootstrap -symbol-bootstrap compose -symbol-bootstrap run +npm run init ``` -You can aggregate all these commands with this one liner: - -``` -symbol-bootstrap start -p bootstrap -``` +## Build -If you need to start fresh, you many need to sudo remove the target folder (docker volumes dirs may be created using sudo). Example: +Build all packages -``` -sudo rm -rf ./target +```bash +npm run build ``` -# Wizard +### Watch -If this is your first time creating a node, it's recommended to use the Wizard. Just follow the instructions: +Watch all packages change. Very useful during development to build only file that changes: -``` -symbol-bootstrap wizard +```bash +npm run watch ``` -# E2E Testing support +### Lint -One use case of this CLI is client E2E testing support. If you are coding a Symbol client, you (Travis or Jenkins) can run e2e tests like: +Fix style and lint for all packages +```bash +npm run style:fix ``` -symbol-bootstrap start -p bootstrap --detached -YOUR TEST (e.g: npm run test, gradle test, selenium etc.) -symbol-bootstrap stop -``` - -`--detached` starts the server waiting until it is up (by polling the network http://localhost:3000/node/health). The command will fail if the components are not up in 30 seconds. - -You can also provide your own custom preset (`-c`) if you want your e2e test to start with a specific state (specific balances addresses, mosaics, namespaces, generation hash seed, etc.) - -## Node client E2E via CLI: - -The CLI can also be used as npm project (dev) dependency (`npm install --save-dev symbol-bootstrap`). Then you can integrate the network to your npm test cycle. -Your `package.json` can look like this: -```yaml +### Run Tests -"devDependencies": { - .... - "symbol-bootstrap": "0.0.x", - .... -} +First of all, this ensures the libraries are correctly building, and passing lint and prettier: -scripts": { -... - "clean-network": "symbol-bootstrap clean", - "run-network": "symbol-bootstrap start -c ./output/my_custom_preset.yml --detached --healthCheck", - "run-stop": "symbol-bootstrap stop", - "integration-test": "....some mocha/jest/etc tests running against localhost:3000 network....", - "e2e": "npm run clean-network && npm run run-network && npm run integration-test && npm run stop-network", -... -} ``` - -Then, you, Jenkins, Travis or your CI tool can run; - -``` -npm run e2e -``` - -## Node client E2E via API: - -Alternatively, you can use the [BootstrapService](https://github.com/nemtech/symbol-bootstrap/blob/main/src/service/BootstrapService.ts) facade to programmatically start and stop a server. - -Example: - -```ts -import {BootstrapService, StartParams, Preset} from 'symbol-bootstrap'; -import {expect} from '@oclif/test'; - -it('Bootstrap e2e test', async () => { - const service = new BootstrapService(); - const config: StartParams = { - preset: Preset.bootstrap, - reset: true, - healthCheck: true, - timeout: 60000 * 5, - target: 'target/bootstrap-test', - detached: true, - user: 'current', - }; - try { - await service.stop(config); - const configResult = await service.start(config); - expect(configResult.presetData).not.null; - expect(configResult.addresses).not.null; - // Here you can write unit tests against a http://localhost:3000 network - } finally { - await service.stop(config); - } -}); +npm run test ``` -It's recommended to reuse the same server for multiple tests by using `beforeAll`, `afterAll` kind of statements. - -# Development - -If you want to contribute to this tool, clone this repo and run: +### Install the symbol-bootstrap cli tool from source code ``` +cd package/bootstrap-cli npm install -g ``` Then, `symbol-bootstrap` runs from the source code. You can now try your features after changing the code. -Pull Requests are appreciated! Please follow the contributing [guidelines](CONTRIBUTING.md). - -Note: cloning this repo is only for people that want to tune the tool in a way it cannot be configured. If this is your case, please provide a feature request. -General users should install this tool like any other node module. - -# Commands - - -# Command Topics - -* [`symbol-bootstrap autocomplete`](docs/autocomplete.md) - display autocomplete installation instructions -* [`symbol-bootstrap clean`](docs/clean.md) - It removes the target folder deleting the generated configuration and data -* [`symbol-bootstrap compose`](docs/compose.md) - It generates the `docker-compose.yml` file from the configured network. -* [`symbol-bootstrap config`](docs/config.md) - Command used to set up the configuration files and the nemesis block for the current network -* [`symbol-bootstrap decrypt`](docs/decrypt.md) - It decrypts a yml file using the provided password. The source file can be a custom preset file, a preset.yml file or an addresses.yml. -* [`symbol-bootstrap encrypt`](docs/encrypt.md) - It encrypts a yml file using the provided password. The source files would be a custom preset file, a preset.yml file or an addresses.yml. -* [`symbol-bootstrap enrollRewardProgram`](docs/enrollRewardProgram.md) - It enrols the nodes in the rewards program by announcing the enroll transaction to the registration address. You can also use this command to update the program registration when you change the agent keys (changing the agent-ca-csr) or server host. -* [`symbol-bootstrap healthCheck`](docs/healthCheck.md) - It checks if the services created with docker compose are up and running. -* [`symbol-bootstrap help`](docs/help.md) - display help for symbol-bootstrap -* [`symbol-bootstrap link`](docs/link.md) - It announces VRF and Voting Link transactions to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network. -* [`symbol-bootstrap pack`](docs/pack.md) - It configures and packages your node into a zip file that can be uploaded to the final node machine. -* [`symbol-bootstrap report`](docs/report.md) - it generates reStructuredText (.rst) reports describing the configuration of each node. -* [`symbol-bootstrap resetData`](docs/resetData.md) - It removes the data keeping the generated configuration, certificates, keys and block 1. -* [`symbol-bootstrap run`](docs/run.md) - It boots the network via docker using the generated `docker-compose.yml` file and configuration. The config and compose methods/commands need to be called before this method. This is just a wrapper for the `docker-compose up` bash call. -* [`symbol-bootstrap start`](docs/start.md) - Single command that aggregates config, compose and run in one line! -* [`symbol-bootstrap stop`](docs/stop.md) - It stops the docker-compose network if running (symbol-bootstrap started with --detached). This is just a wrapper for the `docker-compose down` bash call. -* [`symbol-bootstrap updateVotingKeys`](docs/updateVotingKeys.md) - It updates the voting files containing the voting keys when required. -* [`symbol-bootstrap verify`](docs/verify.md) - It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue. -* [`symbol-bootstrap wizard`](docs/wizard.md) - An utility command that will help you configuring node! - - +### Install the symbol-network cli tool from source code ``` - +cd package/network-cli +npm install -g ``` + +Then, `symbol-network` runs from the source code. You can now try your features after changing the code. diff --git a/ci/release.sh b/ci/release.sh index 0cd9259c9..180264838 100644 --- a/ci/release.sh +++ b/ci/release.sh @@ -7,7 +7,7 @@ VERSION="$(node_load_version)" DEV_BRANCH=dev RELEASE_BRANCH=main POST_RELEASE_BRANCH=main -TRAVIS_REPO_SLUG=nemtech/symbol-bootstrap +TRAVIS_REPO_SLUG=symbol/symbol-bootstrap log_env_variables npm test npm pack diff --git a/cmds/clean-all.sh b/cmds/clean-all.sh deleted file mode 100755 index bc4fe9241..000000000 --- a/cmds/clean-all.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -e - -rootDir="$(dirname "$(realpath $0)")/.." -rm -rf "${rootDir}/target" -echo "target folder removed" diff --git a/cmds/config-bootstrap.sh b/cmds/config-bootstrap.sh deleted file mode 100755 index 1de3d9fd5..000000000 --- a/cmds/config-bootstrap.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -e - -symbol-bootstrap config -p bootstrap --report -t target/bootstrap $1 diff --git a/cmds/ngrok-testnet.sh b/cmds/ngrok-testnet.sh deleted file mode 100755 index 06b6da688..000000000 --- a/cmds/ngrok-testnet.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -e - -ngrok start --config ./ngrok-testnet.yml --all diff --git a/cmds/start-bootstrap-alpha.sh b/cmds/start-bootstrap-alpha.sh deleted file mode 100755 index 8de7625de..000000000 --- a/cmds/start-bootstrap-alpha.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -set -e - -# docker rm -f $(docker ps -aq) -symbol-bootstrap start -p bootstrap -r -t target/bootstrap -a alpha --password 1234 $1 diff --git a/cmds/start-bootstrap-custom.sh b/cmds/start-bootstrap-custom.sh deleted file mode 100755 index ec51c6ba9..000000000 --- a/cmds/start-bootstrap-custom.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -set -e -symbol-bootstrap start -u current -p bootstrap -c test/custom_preset.yml -t target/bootstrap-custom --password 1234 $1 diff --git a/cmds/start-bootstrap-freenodes.sh b/cmds/start-bootstrap-freenodes.sh deleted file mode 100755 index 60cb9d44d..000000000 --- a/cmds/start-bootstrap-freenodes.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -e - -symbol-bootstrap start --reset --preset bootstrap --customPreset ./test/freenodes_preset.yml --user current -t target/bootstrap-freenodes diff --git a/cmds/start-bootstrap-full.sh b/cmds/start-bootstrap-full.sh deleted file mode 100755 index 0ee632802..000000000 --- a/cmds/start-bootstrap-full.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -e - -symbol-bootstrap start -p bootstrap -a full -t target/bootstrap --password 1234 -c test/full_preset.yml $1 $2 $3 diff --git a/cmds/start-bootstrap-optin.sh b/cmds/start-bootstrap-optin.sh deleted file mode 100755 index 3f7aa64e2..000000000 --- a/cmds/start-bootstrap-optin.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -set -e -symbol-bootstrap start -u current -p bootstrap -c test/optin_preset.yml --password 1234 -t target/bootstrap-optin $1 diff --git a/cmds/start-bootstrap-repeat.sh b/cmds/start-bootstrap-repeat.sh deleted file mode 100755 index 516825898..000000000 --- a/cmds/start-bootstrap-repeat.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -docker stop $(docker ps -aq) -docker rm $(docker ps -aq) -symbol-bootstrap start -p bootstrap -c test/repeat_preset.yml -t target/bootstrap-repeat --password 1234 $1 diff --git a/cmds/start-bootstrap-rest.sh b/cmds/start-bootstrap-rest.sh deleted file mode 100755 index f26249ce5..000000000 --- a/cmds/start-bootstrap-rest.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -e - -# docker rm -f $(docker ps -aq) -#./bin/run start -p bootstrap -r -u current -t target/bootstrap $1 - -docker-compose up --remove-orphans --build -f target/bootstrap/docker/docker-compose.yml diff --git a/cmds/start-bootstrap-sudo.sh b/cmds/start-bootstrap-sudo.sh deleted file mode 100755 index 4ce02ee63..000000000 --- a/cmds/start-bootstrap-sudo.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -e - -symbol-bootstrap start -p bootstrap -r -u '' -t target/bootstrap --password 1234 $1 diff --git a/cmds/start-bootstrap.sh b/cmds/start-bootstrap.sh deleted file mode 100755 index 0727defe3..000000000 --- a/cmds/start-bootstrap.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -set -e - -# docker rm -f $(docker ps -aq) -symbol-bootstrap start -p bootstrap -u current -t target/bootstrap -c test/custom_bootstrap.yml --password 1234 $1 diff --git a/cmds/start-light.sh b/cmds/start-light.sh deleted file mode 100755 index deb5ded57..000000000 --- a/cmds/start-light.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -e - -symbol-bootstrap start -p bootstrap -a light -r -t target/light $1 diff --git a/config/docker/explorer/run.sh.mustache b/config/docker/explorer/run.sh.mustache deleted file mode 100644 index ea5ba3fc8..000000000 --- a/config/docker/explorer/run.sh.mustache +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -set -e -echo "Starting explorer $1" -cp config.js /usr/share/nginx/html -nginx -g 'daemon off;' diff --git a/config/explorer/config.js.mustache b/config/explorer/config.js.mustache deleted file mode 100644 index e2c0029cb..000000000 --- a/config/explorer/config.js.mustache +++ /dev/null @@ -1,21 +0,0 @@ -window.globalConfig = { - 'peersApi': { - 'defaultNode': '{{defaultNode}}', - 'nodes': [ -{{#restNodes}} - '{{{.}}}', -{{/restNodes}} - ] - }, - 'endpoints': { - 'marketData': 'https://min-api.cryptocompare.com/' - }, - 'networkConfig': { - 'namespaceName': '{{namespaceName}}', - 'mosaicId': '{{{toSimpleHex currencyMosaicId}}}', - 'divisibility': '{{maxMosaicDivisibility}}' - }, - 'footer': {{{toJson footer}}} -}; - -console.log('GLOBAL CONFIG LOADED!'); diff --git a/docs/config.md b/docs/config.md deleted file mode 100644 index 354607113..000000000 --- a/docs/config.md +++ /dev/null @@ -1,58 +0,0 @@ -`symbol-bootstrap config` -========================= - -Command used to set up the configuration files and the nemesis block for the current network - -* [`symbol-bootstrap config`](#symbol-bootstrap-config) - -## `symbol-bootstrap config` - -Command used to set up the configuration files and the nemesis block for the current network - -``` -USAGE - $ symbol-bootstrap config - -OPTIONS - -a, --assembly=assembly The assembly, example "dual" for testnet. If not provided, the value is - resolved from the target/preset.yml file. - - -c, --customPreset=customPreset External preset file. Values in this file will override the provided presets - - -h, --help It shows the help of this command. - - -p, --preset=(bootstrap|testnet|mainnet) The network preset, can be provided via custom preset or cli parameter. If - not provided, the value is resolved from the target/preset.yml file. - - -r, --reset It resets the configuration generating a new one - - -t, --target=target [default: target] The target folder where the symbol-bootstrap network is - generated - - -u, --user=user [default: current] User used to run docker images when creating - configuration files like certificates or nemesis block. "current" means the - current user. - - --noPassword When provided, Bootstrap will not use a password, so private keys will be - stored in plain text. Use with caution. - - --password=password A password used to encrypt and decrypt private keys in preset files like - addresses.yml and preset.yml. Bootstrap prompts for a password by default, - can be provided in the command line (--password=XXXX) or disabled in the - command line (--noPassword). - - --report It generates reStructuredText (.rst) reports describing the configuration of - each node. - - --upgrade It regenerates the configuration reusing the previous keys. Use this flag - when upgrading the version of bootstrap to keep your node up to date without - dropping the local data. The original preset (-t), assembly (-a), and custom - preset (-a) must be used. Backup the target folder before upgrading. - -EXAMPLES - $ symbol-bootstrap config -p bootstrap - $ symbol-bootstrap config -p testnet -a dual --password 1234 - $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap config -p testnet -a dual -``` - -_See code: [src/commands/config.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/config.ts)_ diff --git a/docs/healthCheck.md b/docs/healthCheck.md deleted file mode 100644 index ab8266790..000000000 --- a/docs/healthCheck.md +++ /dev/null @@ -1,39 +0,0 @@ -`symbol-bootstrap healthCheck` -============================== - -It checks if the services created with docker compose are up and running. - -This command checks: -- Whether the docker containers are running. -- Whether the services' exposed ports are listening. -- Whether the rest gateways' /node/health are OK. - -The health check process handles 'repeat' and custom 'openPort' services. - -* [`symbol-bootstrap healthCheck`](#symbol-bootstrap-healthcheck) - -## `symbol-bootstrap healthCheck` - -It checks if the services created with docker compose are up and running. - -``` -USAGE - $ symbol-bootstrap healthCheck - -OPTIONS - -h, --help It shows the help of this command. - -t, --target=target [default: target] The target folder where the symbol-bootstrap network is generated - -DESCRIPTION - This command checks: - - Whether the docker containers are running. - - Whether the services' exposed ports are listening. - - Whether the rest gateways' /node/health are OK. - - The health check process handles 'repeat' and custom 'openPort' services. - -EXAMPLE - $ symbol-bootstrap healthCheck -``` - -_See code: [src/commands/healthCheck.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/healthCheck.ts)_ diff --git a/docs/help.md b/docs/help.md deleted file mode 100644 index f21b189cb..000000000 --- a/docs/help.md +++ /dev/null @@ -1,23 +0,0 @@ -`symbol-bootstrap help` -======================= - -display help for symbol-bootstrap - -* [`symbol-bootstrap help [COMMAND]`](#symbol-bootstrap-help-command) - -## `symbol-bootstrap help [COMMAND]` - -display help for symbol-bootstrap - -``` -USAGE - $ symbol-bootstrap help [COMMAND] - -ARGUMENTS - COMMAND command to show help for - -OPTIONS - --all see all commands in CLI -``` - -_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v3.1.0/src/commands/help.ts)_ diff --git a/docs/link.md b/docs/link.md deleted file mode 100644 index 8a524fd71..000000000 --- a/docs/link.md +++ /dev/null @@ -1,52 +0,0 @@ -`symbol-bootstrap link` -======================= - -It announces VRF and Voting Link transactions to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network. - -* [`symbol-bootstrap link`](#symbol-bootstrap-link) - -## `symbol-bootstrap link` - -It announces VRF and Voting Link transactions to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network. - -``` -USAGE - $ symbol-bootstrap link - -OPTIONS - -c, --customPreset=customPreset This command uses the encrypted addresses.yml to resolve the main private key. If the - main private is only stored in the custom preset, you can provide it using this - param. Otherwise, the command may ask for it when required. - - -h, --help It shows the help of this command. - - -t, --target=target [default: target] The target folder where the symbol-bootstrap network is generated - - -u, --url=url [default: http://localhost:3000] the network url - - --maxFee=maxFee the max fee used when announcing (absolute). The node min multiplier will be used if - it is not provided. - - --noPassword When provided, Bootstrap will not use a password, so private keys will be stored in - plain text. Use with caution. - - --password=password A password used to encrypt and decrypt private keys in preset files like - addresses.yml and preset.yml. Bootstrap prompts for a password by default, can be - provided in the command line (--password=XXXX) or disabled in the command line - (--noPassword). - - --ready If --ready is provided, the command will not ask for confirmation when announcing - transactions. - - --unlink Perform "Unlink" transactions unlinking the voting and VRF keys from the node signer - account - - --useKnownRestGateways Use the best NEM node available when announcing. Otherwise the command will use the - node provided by the --url parameter. - -EXAMPLES - $ symbol-bootstrap link - $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap link --unlink --useKnownRestGateways -``` - -_See code: [src/commands/link.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/link.ts)_ diff --git a/docs/pack.md b/docs/pack.md index c777ce2f6..35077b2a2 100644 --- a/docs/pack.md +++ b/docs/pack.md @@ -59,4 +59,4 @@ EXAMPLES $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap pack -p mainnet -a dual -c custom-preset.yml ``` -_See code: [src/commands/pack.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/pack.ts)_ +_See code: [src/commands/pack.ts](https://github.com/symbol/symbol-bootstrap/blob/v1.0.8/src/commands/pack.ts)_ diff --git a/docs/verify.md b/docs/verify.md deleted file mode 100644 index 1298f9ad5..000000000 --- a/docs/verify.md +++ /dev/null @@ -1,23 +0,0 @@ -`symbol-bootstrap verify` -========================= - -It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue. - -* [`symbol-bootstrap verify`](#symbol-bootstrap-verify) - -## `symbol-bootstrap verify` - -It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue. - -``` -USAGE - $ symbol-bootstrap verify - -OPTIONS - -h, --help It shows the help of this command. - -EXAMPLE - $ symbol-bootstrap verify -``` - -_See code: [src/commands/verify.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/verify.ts)_ diff --git a/docs/wizard.md b/docs/wizard.md index 351de636a..4f1dad90a 100644 --- a/docs/wizard.md +++ b/docs/wizard.md @@ -36,4 +36,4 @@ EXAMPLE $ symbol-bootstrap wizard ``` -_See code: [src/commands/wizard.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/wizard.ts)_ +_See code: [src/commands/wizard.ts](https://github.com/symbol/symbol-bootstrap/blob/v1.0.8/src/commands/wizard.ts)_ diff --git a/lerna.json b/lerna.json new file mode 100644 index 000000000..2b4a1377f --- /dev/null +++ b/lerna.json @@ -0,0 +1,6 @@ +{ + "packages": [ + "packages/*" + ], + "version": "independent" +} diff --git a/monorepo-merge-reports.js b/monorepo-merge-reports.js new file mode 100644 index 000000000..a8e0921d2 --- /dev/null +++ b/monorepo-merge-reports.js @@ -0,0 +1,31 @@ +#!/usr/bin/env node +'use strict'; + +const path = require('path'); +const { spawnSync } = require('child_process'); + +const rimraf = require('rimraf'); +const makeDir = require('make-dir'); +const glob = require('glob'); + +process.chdir(__dirname); +rimraf.sync('.nyc_output'); +makeDir.sync('.nyc_output'); +// Merge coverage data from each package so we can generate a complete report +glob.sync('packages/*/.nyc_output').forEach((nycOutput) => { + const cwd = path.dirname(nycOutput); + const { status, stderr } = spawnSync( + 'npx', + ['nyc', 'merge', '.nyc_output', path.join(__dirname, '.nyc_output', path.basename(cwd) + '.json')], + { + encoding: 'utf8', + shell: true, + cwd, + }, + ); + + if (status !== 0) { + console.error(stderr); + process.exit(status); + } +}); diff --git a/package-lock.json b/package-lock.json index 1d35db6c4..b6c7b3af2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,112 +1,81 @@ { - "name": "symbol-bootstrap", - "version": "1.0.8", + "name": "symbol-bootstrap-parent", + "version": "0.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "1.0.8", - "license": "Apache-2.0", - "dependencies": { - "@oclif/command": "^1.7.0", - "@oclif/config": "^1.16.0", - "@oclif/plugin-autocomplete": "^0.3.0", - "@oclif/plugin-help": "^3.1.0", - "archiver": "^5.2.0", - "figlet": "^1.2.4", - "handlebars": "^4.7.7", - "inquirer": "^7.3.3", - "js-yaml": "^3.14.0", - "lodash": "^4.17.21", - "memorystream": "^0.3.1", - "noble-ed25519": "^1.0.3", - "node-forge": "^0.10.0", - "node-stream-zip": "^1.12.0", - "rxjs": "^6.6.3", - "semver": "^7.3.5", - "shx": "^0.3.2", - "sshpk": "^1.16.1", - "symbol-hd-wallets": "^0.14.1-alpha-202103052158", - "symbol-sdk": "^1.0.1", - "tslib": "^1.13.0", - "utf8": "^2.1.2", - "winston": "^3.3.3" - }, - "bin": { - "symbol-bootstrap": "bin/run" - }, + "name": "symbol-bootstrap-parent", + "version": "0.0.0", "devDependencies": { - "@oclif/dev-cli": "^1.22.2", + "@oclif/dev-cli": "^1.26.0", "@oclif/test": "^1.2.8", - "@types/archiver": "^5.1.0", - "@types/bip32": "^1.0.2", - "@types/chai": "^4.2.12", - "@types/figlet": "^1.2.0", - "@types/handlebars": "^4.1.0", - "@types/inquirer": "^7.3.1", + "@types/archiver": "^5.1.1", + "@types/chai": "^4.2.19", + "@types/figlet": "^1.5.1", + "@types/inquirer": "^7.3.2", "@types/js-yaml": "^3.12.5", - "@types/lodash": "^4.14.165", - "@types/memorystream": "^0.3.0", + "@types/lodash": "^4.14.170", "@types/mocha": "^8.2.2", - "@types/node": "^10.17.28", - "@types/node-forge": "^0.9.4", + "@types/node": "^15.12.4", + "@types/node-fetch": "^2.5.10", "@types/semver": "^7.3.6", - "@types/sshpk": "^1.10.5", - "@types/winston": "^2.4.4", - "@typescript-eslint/eslint-plugin": "^3.7.1", - "@typescript-eslint/parser": "^3.7.1", - "chai": "^4.2.0", - "coveralls": "^3.1.0", + "@typescript-eslint/eslint-plugin": "^4.28.0", + "@typescript-eslint/parser": "^4.28.0", + "chai": "^4.3.4", + "coveralls": "^3.1.1", "create-ts-index": "^1.13.6", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.10.1", - "eslint-plugin-prettier": "^3.1.3", - "globby": "^10.0.2", - "marked": ">=2.0.0", - "mocha": "^8.3.2", + "dir-compare": "^3.3.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-header": "^3.1.1", + "eslint-plugin-prettier": "^3.4.0", + "lerna": "^4.0.0", + "mocha": "^9.0.1", "mocha-lcov-reporter": "^1.3.0", "mock-stdin": "^1.0.0", "nyc": "^15.1.0", - "prettier": "^2.0.5", - "prettier-plugin-organize-imports": "^1.1.1", - "ts-node": "^8.10.2", - "typedoc": "^0.20.34", - "typescript": "^3.9.7" - }, - "engines": { - "node": ">=12.0.0" + "prettier": "^2.3.1", + "prettier-plugin-organize-imports": "^2.1.0", + "shx": "^0.3.3", + "ts-node": "^10.0.0", + "typedoc": "^0.21.2", + "typescript": "^4.3.4" } }, "node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "dependencies": { "@babel/highlight": "^7.10.4" } }, "node_modules/@babel/compat-data": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", - "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", - "dev": true + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/core": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz", - "integrity": "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -116,32 +85,22 @@ }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, - "node_modules/@babel/core/node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "node_modules/@babel/core/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/core/node_modules/semver": { @@ -154,26 +113,35 @@ } }, "node_modules/@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dev": true, "dependencies": { - "@babel/types": "^7.13.0", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", - "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.12", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { @@ -186,142 +154,187 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", - "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", "dev": true, "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -331,109 +344,132 @@ } }, "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/template/node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true + "node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@babel/template/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", - "debug": "^4.1.0", - "globals": "^11.1.0" + "engines": { + "node": ">=4" } }, - "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "node_modules/@babel/traverse/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "node_modules/@eslint/eslintrc": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@babel/types": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", - "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" } }, - "node_modules/@babel/types/node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", "dev": true }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", - "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@istanbuljs/load-nyc-config": { @@ -452,6 +488,58 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -470,372 +558,414 @@ "node": ">=8" } }, - "node_modules/@js-joda/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz", - "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==" + "node_modules/@lerna/add": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-4.0.0.tgz", + "integrity": "sha512-cpmAH1iS3k8JBxNvnMqrGTTjbY/ZAiKa1ChJzFevMYY3eeqbvhsBKnBcxjRXtdrJ6bd3dCQM+ZtK+0i682Fhng==", + "dev": true, + "dependencies": { + "@lerna/bootstrap": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "npm-package-arg": "^8.1.0", + "p-map": "^4.0.0", + "pacote": "^11.2.6", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "node_modules/@lerna/add/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "node_modules/@lerna/bootstrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-4.0.0.tgz", + "integrity": "sha512-RkS7UbeM2vu+kJnHzxNRCLvoOP9yGNgkzRdy4UV2hNalD7EP41bLvRVOwRYQ7fhc2QcbhnKNdOBihYRL0LcKtw==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/has-npm-version": "4.0.0", + "@lerna/npm-install": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/rimraf-dir": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/symlink-binary": "4.0.0", + "@lerna/symlink-dependencies": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "read-package-tree": "^5.3.1", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/bootstrap/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "node_modules/@lerna/changed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-4.0.0.tgz", + "integrity": "sha512-cD+KuPRp6qiPOD+BO6S6SN5cARspIaWSOqGBpGnYzLb4uWT8Vk4JzKyYtc8ym1DIwyoFXHosXt8+GDAgR8QrgQ==", + "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/listable": "4.0.0", + "@lerna/output": "4.0.0" }, "engines": { - "node": ">= 8" + "node": ">= 10.18.0" } }, - "node_modules/@oclif/command": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.7.0.tgz", - "integrity": "sha512-TkknFtWcZI8te0E8sW+ohiblExrLx73rIcV4KdIzDX01u+oTZWZaap51F6TSGFnR/Gey0WctaDvJhZlt4xgKdA==", + "node_modules/@lerna/check-working-tree": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-4.0.0.tgz", + "integrity": "sha512-/++bxM43jYJCshBiKP5cRlCTwSJdRSxVmcDAXM+1oUewlZJVSVlnks5eO0uLxokVFvLhHlC5kHMc7gbVFPHv6Q==", + "dev": true, "dependencies": { - "@oclif/config": "^1.15.1", - "@oclif/errors": "^1.3.3", - "@oclif/parser": "^3.8.3", - "@oclif/plugin-help": "^3", - "debug": "^4.1.1", - "semver": "^5.6.0" + "@lerna/collect-uncommitted": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "@lerna/validation-error": "4.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 10.18.0" } }, - "node_modules/@oclif/command/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/@oclif/config": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.16.0.tgz", - "integrity": "sha512-vOnMPQcHokC03WBCuLipTxksTwgZcmDOnH2H0UHqndfKKN9GVDzpZTH6zaFVQBdjTME5VtRzg9A2UaNmq6OXWw==", + "node_modules/@lerna/child-process": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-4.0.0.tgz", + "integrity": "sha512-XtCnmCT9eyVsUUHx6y/CTBYdV9g2Cr/VxyseTWBgfIur92/YKClfEtJTbOh94jRT62hlKLqSvux/UhxXVh613Q==", + "dev": true, "dependencies": { - "@oclif/errors": "^1.3.3", - "@oclif/parser": "^3.8.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-wsl": "^2.1.1", - "tslib": "^1.9.3" + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 10.18.0" } }, - "node_modules/@oclif/config/node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "node_modules/@lerna/child-process/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@oclif/dev-cli": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/@oclif/dev-cli/-/dev-cli-1.22.2.tgz", - "integrity": "sha512-c7633R37RxrQIpwqPKxjNRm6/jb1yuG8fd16hmNz9Nw+/MUhEtQtKHSCe9ScH8n5M06l6LEo4ldk9LEGtpaWwA==", + "node_modules/@lerna/child-process/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "dependencies": { - "@oclif/command": "^1.5.13", - "@oclif/config": "^1.12.12", - "@oclif/errors": "^1.2.2", - "@oclif/plugin-help": "^2.1.6", - "cli-ux": "^5.2.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "github-slugger": "^1.2.1", - "lodash": "^4.17.11", - "normalize-package-data": "^2.5.0", - "qqjs": "^0.3.10", - "tslib": "^1.9.3" - }, - "bin": { - "oclif-dev": "bin/run" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@oclif/dev-cli/node_modules/@oclif/plugin-help": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-2.2.3.tgz", - "integrity": "sha512-bGHUdo5e7DjPJ0vTeRBMIrfqTRDBfyR5w0MP41u0n3r7YG5p14lvMmiCXxi6WDaP2Hw5nqx3PnkAIntCKZZN7g==", + "node_modules/@lerna/child-process/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@oclif/command": "^1.5.13", - "chalk": "^2.4.1", - "indent-string": "^4.0.0", - "lodash.template": "^4.4.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0", - "widest-line": "^2.0.1", - "wrap-ansi": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8.0.0" + "node": ">=7.0.0" } }, - "node_modules/@oclif/dev-cli/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } + "node_modules/@lerna/child-process/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/@oclif/dev-cli/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@lerna/child-process/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@oclif/dev-cli/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@lerna/child-process/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@oclif/dev-cli/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/@oclif/dev-cli/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/@oclif/dev-cli/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/@lerna/child-process/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/@oclif/dev-cli/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/@lerna/child-process/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@oclif/dev-cli/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/@lerna/child-process/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@oclif/dev-cli/node_modules/wrap-ansi": { + "node_modules/@lerna/clean": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-4.0.0.tgz", + "integrity": "sha512-uugG2iN9k45ITx2jtd8nEOoAtca8hNlDCUM0N3lFgU/b1mEQYAPRkqr1qs4FLRl/Y50ZJ41wUz1eazS+d/0osA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/rimraf-dir": "4.0.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/@oclif/dev-cli/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" + "node": ">= 10.18.0" } }, - "node_modules/@oclif/dev-cli/node_modules/wrap-ansi/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/@lerna/clean/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@oclif/dev-cli/node_modules/wrap-ansi/node_modules/strip-ansi": { + "node_modules/@lerna/cli": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-4.0.0.tgz", + "integrity": "sha512-Neaw3GzFrwZiRZv2g7g6NwFjs3er1vhraIniEs0jjVLPMNC4eata0na3GfE5yibkM/9d3gZdmihhZdZ3EBdvYA==", "dev": true, "dependencies": { - "ansi-regex": "^3.0.0" + "@lerna/global-options": "4.0.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2", + "yargs": "^16.2.0" }, "engines": { - "node": ">=4" + "node": ">= 10.18.0" } }, - "node_modules/@oclif/errors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.3.tgz", - "integrity": "sha512-EJR6AIOEkt/NnARNIVAskPDVtdhtO5TTNXmhDrGqMoWVsr0R6DkkLrMyq95BmHvlVWM1nduoq4fQPuCyuF2jaA==", + "node_modules/@lerna/cli/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "dependencies": { - "clean-stack": "^3.0.0", - "fs-extra": "^9.0.1", - "indent-string": "^4.0.0", + "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, + } + }, + "node_modules/@lerna/cli/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "node_modules/@oclif/errors/node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "node_modules/@lerna/cli/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" } }, - "node_modules/@oclif/linewrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", - "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==" - }, - "node_modules/@oclif/parser": { - "version": "3.8.5", - "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.5.tgz", - "integrity": "sha512-yojzeEfmSxjjkAvMRj0KzspXlMjCfBzNRPkWw8ZwOSoNWoJn+OCS/m/S+yfV6BvAM4u2lTzX9Y5rCbrFIgkJLg==", + "node_modules/@lerna/collect-uncommitted": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-4.0.0.tgz", + "integrity": "sha512-ufSTfHZzbx69YNj7KXQ3o66V4RC76ffOjwLX0q/ab//61bObJ41n03SiQEhSlmpP+gmFbTJ3/7pTe04AHX9m/g==", + "dev": true, "dependencies": { - "@oclif/errors": "^1.2.2", - "@oclif/linewrap": "^1.0.0", - "chalk": "^2.4.2", - "tslib": "^1.9.3" + "@lerna/child-process": "4.0.0", + "chalk": "^4.1.0", + "npmlog": "^4.1.2" }, "engines": { - "node": ">=8.0.0" + "node": ">= 10.18.0" } }, - "node_modules/@oclif/plugin-autocomplete": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.3.0.tgz", - "integrity": "sha512-gCuIUCswvoU1BxDDvHSUGxW8rFagiacle8jHqE49+WnuniXD/N8NmJvnzmlNyc8qLE192CnKK+qYyAF+vaFQBg==", + "node_modules/@lerna/collect-uncommitted/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "@oclif/command": "^1.5.13", - "@oclif/config": "^1.13.0", - "chalk": "^4.1.0", - "cli-ux": "^5.2.1", - "debug": "^4.0.0", - "fs-extra": "^9.0.1", - "moment": "^2.22.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@oclif/plugin-autocomplete/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "node_modules/@lerna/collect-uncommitted/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@oclif/plugin-autocomplete/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/@lerna/collect-uncommitted/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/@oclif/plugin-autocomplete/node_modules/has-flag": { + "node_modules/@lerna/collect-uncommitted/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@lerna/collect-uncommitted/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@oclif/plugin-autocomplete/node_modules/supports-color": { + "node_modules/@lerna/collect-uncommitted/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -843,5373 +973,5891 @@ "node": ">=8" } }, - "node_modules/@oclif/plugin-autocomplete/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@oclif/plugin-help": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.1.0.tgz", - "integrity": "sha512-orSWpXGlJaX16eSjAtI8scA8QhrjQOaCSHodEx52t18JKbIVzG8jcngugyWAOB/V4jhPl0rdiVk9XFsaIIiG2g==", + "node_modules/@lerna/collect-updates": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-4.0.0.tgz", + "integrity": "sha512-bnNGpaj4zuxsEkyaCZLka9s7nMs58uZoxrRIPJ+nrmrZYp1V5rrd+7/NYTuunOhY2ug1sTBvTAxj3NZQ+JKnOw==", + "dev": true, "dependencies": { - "@oclif/command": "^1.5.20", - "@oclif/config": "^1.15.1", - "chalk": "^2.4.1", - "indent-string": "^4.0.0", - "lodash.template": "^4.4.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0", - "widest-line": "^2.0.1", - "wrap-ansi": "^4.0.0" + "@lerna/child-process": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "slash": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 10.18.0" } }, - "node_modules/@oclif/plugin-help/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "node_modules/@lerna/command": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-4.0.0.tgz", + "integrity": "sha512-LM9g3rt5FsPNFqIHUeRwWXLNHJ5NKzOwmVKZ8anSp4e1SPrv2HNc1V02/9QyDDZK/w+5POXH5lxZUI1CHaOK/A==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/project": "4.0.0", + "@lerna/validation-error": "4.0.0", + "@lerna/write-log-file": "4.0.0", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^4.1.2" + }, "engines": { - "node": ">=6" + "node": ">= 10.18.0" } }, - "node_modules/@oclif/plugin-help/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@lerna/command/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/@oclif/plugin-help/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@oclif/plugin-help/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@oclif/plugin-help/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/@oclif/plugin-help/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/@lerna/command/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@oclif/plugin-help/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/@lerna/command/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@oclif/plugin-help/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/@lerna/conventional-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-4.0.0.tgz", + "integrity": "sha512-CSUQRjJHFrH8eBn7+wegZLV3OrNc0Y1FehYfYGhjLE2SIfpCL4bmfu/ViYuHh9YjwHaA+4SX6d3hR+xkeseKmw==", + "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "@lerna/validation-error": "4.0.0", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.2", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "lodash.template": "^4.5.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "pify": "^5.0.0", + "semver": "^7.3.4" }, "engines": { - "node": ">=6" + "node": ">= 10.18.0" } }, - "node_modules/@oclif/plugin-help/node_modules/wrap-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "node_modules/@lerna/conventional-commits/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/@oclif/plugin-help/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "node_modules/@lerna/conventional-commits/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@oclif/plugin-help/node_modules/wrap-ansi/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/@lerna/conventional-commits/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, "engines": { - "node": ">=4" + "node": ">= 10.0.0" } }, - "node_modules/@oclif/plugin-help/node_modules/wrap-ansi/node_modules/strip-ansi": { + "node_modules/@lerna/create": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-4.0.0.tgz", + "integrity": "sha512-mVOB1niKByEUfxlbKTM1UNECWAjwUdiioIbRQZEeEabtjCL69r9rscIsjlGyhGWCfsdAG5wfq4t47nlDXdLLag==", + "dev": true, "dependencies": { - "ansi-regex": "^3.0.0" + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "init-package-json": "^2.0.2", + "npm-package-arg": "^8.1.0", + "p-reduce": "^2.1.0", + "pacote": "^11.2.6", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0", + "whatwg-url": "^8.4.0", + "yargs-parser": "20.2.4" }, "engines": { - "node": ">=4" - } - }, - "node_modules/@oclif/screen": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", - "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==", - "engines": { - "node": ">=8.0.0" + "node": ">= 10.18.0" } }, - "node_modules/@oclif/test": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@oclif/test/-/test-1.2.8.tgz", - "integrity": "sha512-HCh0qPge1JCqTEw4s2ScnicEZd4Ro4/0VvdjpsfCiX6fuDV53fRZ2uqLTgxKGHrVoqOZnVrRZHyhFyEsFGs+zQ==", + "node_modules/@lerna/create-symlink": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-4.0.0.tgz", + "integrity": "sha512-I0phtKJJdafUiDwm7BBlEUOtogmu8+taxq6PtIrxZbllV9hWg59qkpuIsiFp+no7nfRVuaasNYHwNUhDAVQBig==", "dev": true, "dependencies": { - "fancy-test": "^1.4.3" + "cmd-shim": "^4.1.0", + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2" }, "engines": { - "node": ">=8.0.0" + "node": ">= 10.18.0" } }, - "node_modules/@types/archiver": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.0.tgz", - "integrity": "sha512-baFOhanb/hxmcOd1Uey2TfFg43kTSmM6py1Eo7Rjbv/ivcl7PXLhY0QgXGf50Hx/eskGCFqPfhs/7IZLb15C5g==", + "node_modules/@lerna/create-symlink/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "@types/glob": "*" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/bip32": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/bip32/-/bip32-1.0.2.tgz", - "integrity": "sha512-gqkz3Jq2OA3s5QOHe7de9tUzW7Xjoct6ImCbt0KQnF0ParqDSvLo5Fu+mKQykFF1fgIcdzEmm0CO6HN+xG2SAA==", + "node_modules/@lerna/create-symlink/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "@types/node": "*" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@types/chai": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.12.tgz", - "integrity": "sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ==", - "dev": true - }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "node_modules/@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "node_modules/@types/figlet": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.2.0.tgz", - "integrity": "sha512-TDZkNpYfkc3X8yv7w1QBziZmmxzNfGKX+YjeNkMpmSiNV0QOdNf9G5cEZB3FH1/oaqpSQEdxuDzURdju2L3lng==", - "dev": true - }, - "node_modules/@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "node_modules/@lerna/create-symlink/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@types/handlebars": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.1.0.tgz", - "integrity": "sha512-gq9YweFKNNB1uFK71eRqsd4niVkXrxHugqWFQkeLRJvGjnxsLr16bYtcsG4tOFwmYi0Bax+wCkbf1reUfdl4kA==", + "node_modules/@lerna/create/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "handlebars": "*" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/inquirer": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-7.3.1.tgz", - "integrity": "sha512-osD38QVIfcdgsPCT0V3lD7eH0OFurX71Jft18bZrsVQWVRt6TuxRzlr0GJLrxoHZR2V5ph7/qP8se/dcnI7o0g==", + "node_modules/@lerna/create/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "@types/through": "*", - "rxjs": "^6.4.0" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@types/js-yaml": { - "version": "3.12.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.5.tgz", - "integrity": "sha512-JCcp6J0GV66Y4ZMDAQCXot4xprYB+Zfd3meK9+INSJeVZwJmHAW30BBEEkPzXswMXuiyReUGOP3GxrADc9wPww==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.14.165", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.165.tgz", - "integrity": "sha512-tjSSOTHhI5mCHTy/OOXYIhi2Wt1qcbHmuXD1Ha7q70CgI/I71afO4XtLb/cVexki1oVYchpul/TOuu3Arcdxrg==", - "dev": true - }, - "node_modules/@types/memorystream": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@types/memorystream/-/memorystream-0.3.0.tgz", - "integrity": "sha512-gzh6mqZcLryYHn4g2MuMWjo9J1+Py/XYwITyZmUxV7ZoBIi7bTbBgSiuC5tcm3UL3gmaiYssQFDlXr/3fK94cw==", + "node_modules/@lerna/create/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz", - "integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "10.17.28", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.28.tgz", - "integrity": "sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ==", - "dev": true - }, - "node_modules/@types/node-forge": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-0.9.4.tgz", - "integrity": "sha512-uFhaKXdhhrLNzfNhXbXJqDwF3jXMzN9qfkdW+IAMnAfwqNZhBcE/cciMITLT0Sg6ls6JYHo3xVWNXAG1g9tm8A==", + "node_modules/@lerna/describe-ref": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-4.0.0.tgz", + "integrity": "sha512-eTU5+xC4C5Gcgz+Ey4Qiw9nV2B4JJbMulsYJMW8QjGcGh8zudib7Sduj6urgZXUYNyhYpRs+teci9M2J8u+UvQ==", "dev": true, "dependencies": { - "@types/node": "*" + "@lerna/child-process": "4.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/@types/semver": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.6.tgz", - "integrity": "sha512-0caWDWmpCp0uifxFh+FaqK3CuZ2SkRR/ZRxAV5+zNdC3QVUi6wyOJnefhPvtNt8NQWXB5OA93BUvZsXpWat2Xw==", - "dev": true - }, - "node_modules/@types/sinon": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", - "integrity": "sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg==", + "node_modules/@lerna/diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-4.0.0.tgz", + "integrity": "sha512-jYPKprQVg41+MUMxx6cwtqsNm0Yxx9GDEwdiPLwcUTFx+/qKCEwifKNJ1oGIPBxyEHX2PFCOjkK39lHoj2qiag==", "dev": true, "dependencies": { - "@types/sinonjs__fake-timers": "*" + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/validation-error": "4.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz", - "integrity": "sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg==", - "dev": true - }, - "node_modules/@types/sshpk": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/@types/sshpk/-/sshpk-1.10.5.tgz", - "integrity": "sha512-5EKeKE0YmM2F5xjhk5k6mgL9tx5XpHPqKVaN5c1zCBGSFv4VPRqp1fhGKjo1lkyb7kmvchjgWB8TPAT14+JiRg==", + "node_modules/@lerna/exec": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-4.0.0.tgz", + "integrity": "sha512-VGXtL/b/JfY84NB98VWZpIExfhLOzy0ozm/0XaS4a2SmkAJc5CeUfrhvHxxkxiTBLkU+iVQUyYEoAT0ulQ8PCw==", "dev": true, "dependencies": { - "@types/node": "*" + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/profiler": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/@types/through": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", - "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "node_modules/@lerna/exec/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "dependencies": { - "@types/node": "*" + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/winston": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.4.4.tgz", - "integrity": "sha512-BVGCztsypW8EYwJ+Hq+QNYiT/MUyCif0ouBH+flrY66O5W+KIXAMML6E/0fJpm7VjIzgangahl5S03bJJQGrZw==", + "node_modules/@lerna/filter-options": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-4.0.0.tgz", + "integrity": "sha512-vV2ANOeZhOqM0rzXnYcFFCJ/kBWy/3OA58irXih9AMTAlQLymWAK0akWybl++sUJ4HB9Hx12TOqaXbYS2NM5uw==", "dev": true, "dependencies": { - "winston": "*" + "@lerna/collect-updates": "4.0.0", + "@lerna/filter-packages": "4.0.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.8.0.tgz", - "integrity": "sha512-lFb4VCDleFSR+eo4Ew+HvrJ37ZH1Y9ZyE+qyP7EiwBpcCVxwmUc5PAqhShCQ8N8U5vqYydm74nss+a0wrrCErw==", + "node_modules/@lerna/filter-packages": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-4.0.0.tgz", + "integrity": "sha512-+4AJIkK7iIiOaqCiVTYJxh/I9qikk4XjNQLhE3kixaqgMuHl1NQ99qXRR0OZqAWB9mh8Z1HA9bM5K1HZLBTOqA==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "3.8.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "@lerna/validation-error": "4.0.0", + "multimatch": "^5.0.0", + "npmlog": "^4.1.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 10.18.0" } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.8.0.tgz", - "integrity": "sha512-o8T1blo1lAJE0QDsW7nSyvZHbiDzQDjINJKyB44Z3sSL39qBy5L10ScI/XwDtaiunoyKGLiY9bzRk4YjsUZl8w==", + "node_modules/@lerna/get-npm-exec-opts": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-4.0.0.tgz", + "integrity": "sha512-yvmkerU31CTWS2c7DvmAWmZVeclPBqI7gPVr5VATUKNWJ/zmVcU4PqbYoLu92I9Qc4gY1TuUplMNdNuZTSL7IQ==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.8.0", - "@typescript-eslint/typescript-estree": "3.8.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "npmlog": "^4.1.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 10.18.0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.8.0.tgz", - "integrity": "sha512-u5vjOBaCsnMVQOvkKCXAmmOhyyMmFFf5dbkM3TIbg3MZ2pyv5peE4gj81UAbTHwTOXEwf7eCQTUMKrDl/+qGnA==", + "node_modules/@lerna/get-packed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-4.0.0.tgz", + "integrity": "sha512-rfWONRsEIGyPJTxFzC8ECb3ZbsDXJbfqWYyeeQQDrJRPnEJErlltRLPLgC2QWbxFgFPsoDLeQmFHJnf0iDfd8w==", "dev": true, "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.8.0", - "@typescript-eslint/types": "3.8.0", - "@typescript-eslint/typescript-estree": "3.8.0", - "eslint-visitor-keys": "^1.1.0" + "fs-extra": "^9.1.0", + "ssri": "^8.0.1", + "tar": "^6.1.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 10.18.0" } }, - "node_modules/@typescript-eslint/types": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.8.0.tgz", - "integrity": "sha512-8kROmEQkv6ss9kdQ44vCN1dTrgu4Qxrd2kXr10kz2NP5T8/7JnEfYNxCpPkArbLIhhkGLZV3aVMplH1RXQRF7Q==", + "node_modules/@lerna/get-packed/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.8.0.tgz", - "integrity": "sha512-MTv9nPDhlKfclwnplRNDL44mP2SY96YmPGxmMbMy6x12I+pERcxpIUht7DXZaj4mOKKtet53wYYXU0ABaiXrLw==", + "node_modules/@lerna/get-packed/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "3.8.0", - "@typescript-eslint/visitor-keys": "3.8.0", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "universalify": "^2.0.0" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.8.0.tgz", - "integrity": "sha512-gfqQWyVPpT9NpLREXNR820AYwgz+Kr1GuF3nf1wxpHD6hdxI62tq03ToomFnDxY0m3pUB39IF7sil7D5TQexLA==", + "node_modules/@lerna/get-packed/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": ">= 10.0.0" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "node_modules/@lerna/github-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-4.0.0.tgz", + "integrity": "sha512-2jhsldZtTKXYUBnOm23Lb0Fx8G4qfSXF9y7UpyUgWUj+YZYd+cFxSuorwQIgk5P4XXrtVhsUesIsli+BYSThiw==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@lerna/child-process": "4.0.0", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^18.1.0", + "git-url-parse": "^11.4.4", + "npmlog": "^4.1.2" }, "engines": { - "node": ">=0.4.0" + "node": ">= 10.18.0" } }, - "node_modules/acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", - "dev": true - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@lerna/gitlab-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-4.0.0.tgz", + "integrity": "sha512-OMUpGSkeDWFf7BxGHlkbb35T7YHqVFCwBPSIR6wRsszY8PAzCYahtH3IaJzEJyUg6vmZsNl0FSr3pdA2skhxqA==", "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "node-fetch": "^2.6.1", + "npmlog": "^4.1.2", + "whatwg-url": "^8.4.0" }, "engines": { - "node": ">=8" + "node": ">= 10.18.0" } }, - "node_modules/aggregate-error/node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/@lerna/global-options": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-4.0.0.tgz", + "integrity": "sha512-TRMR8afAHxuYBHK7F++Ogop2a82xQjoGna1dvPOY6ltj/pEx59pdgcJfYcynYqMkFIk8bhLJJN9/ndIfX29FTQ==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 10.18.0" } }, - "node_modules/ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "node_modules/@lerna/has-npm-version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-4.0.0.tgz", + "integrity": "sha512-LQ3U6XFH8ZmLCsvsgq1zNDqka0Xzjq5ibVN+igAI5ccRWNaUsE/OcmsyMr50xAtNQMYMzmpw5GVLAivT2/YzCg==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@lerna/child-process": "4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "node_modules/@lerna/import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-4.0.0.tgz", + "integrity": "sha512-FaIhd+4aiBousKNqC7TX1Uhe97eNKf5/SC7c5WZANVWtC7aBWdmswwDt3usrzCNpj6/Wwr9EtEbYROzxKH8ffg==", "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" + }, "engines": { - "node": ">=6" + "node": ">= 10.18.0" } }, - "node_modules/ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "node_modules/@lerna/import/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { - "type-fest": "^0.11.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "node_modules/@lerna/import/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/import/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, "engines": { - "node": ">=8" + "node": ">= 10.0.0" } }, - "node_modules/ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "node_modules/@lerna/info": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-4.0.0.tgz", + "integrity": "sha512-8Uboa12kaCSZEn4XRfPz5KU9XXoexSPS4oeYGj76s2UQb1O1GdnEyfjyNWoUl1KlJ2i/8nxUskpXIftoFYH0/Q==", + "dev": true, "dependencies": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" + "@lerna/command": "4.0.0", + "@lerna/output": "4.0.0", + "envinfo": "^7.7.4" }, "engines": { - "node": ">=8" + "node": ">= 10.18.0" } }, - "node_modules/ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" - }, - "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "node_modules/@lerna/init": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-4.0.0.tgz", + "integrity": "sha512-wY6kygop0BCXupzWj5eLvTUqdR7vIAm0OgyV9WHpMYQGfs1V22jhztt8mtjCloD/O0nEe4tJhdG62XU5aYmPNQ==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" }, "engines": { - "node": ">= 8" + "node": ">= 10.18.0" } }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "node_modules/@lerna/init/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "default-require-extensions": "^3.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/archiver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "node_modules/@lerna/init/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">= 10" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "node_modules/@lerna/init/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node_modules/@lerna/init/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/@lerna/link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-4.0.0.tgz", + "integrity": "sha512-KlvPi7XTAcVOByfaLlOeYOfkkDcd+bejpHMCd1KcArcFTwijOwXOVi24DYomIeHvy6HsX/IUquJ4PPUJIeB4+w==", + "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "@lerna/command": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/symlink-dependencies": "4.0.0", + "p-map": "^4.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@lerna/link/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@lerna/list": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-4.0.0.tgz", + "integrity": "sha512-L2B5m3P+U4Bif5PultR4TI+KtW+SArwq1i75QZ78mRYxPc0U/piau1DbLOmwrdqr99wzM49t0Dlvl6twd7GHFg==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/listable": "4.0.0", + "@lerna/output": "4.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 10.18.0" } }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "node_modules/@lerna/listable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-4.0.0.tgz", + "integrity": "sha512-/rPOSDKsOHs5/PBLINZOkRIX1joOXUXEtyUs5DHLM8q6/RP668x/1lFhw6Dx7/U+L0+tbkpGtZ1Yt0LewCLgeQ==", + "dev": true, "dependencies": { - "safer-buffer": "~2.1.0" + "@lerna/query-graph": "4.0.0", + "chalk": "^4.1.0", + "columnify": "^1.5.4" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "node_modules/@lerna/listable/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=0.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/@lerna/listable/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "node_modules/@lerna/listable/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "node_modules/@lerna/listable/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/@lerna/listable/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "node_modules/@lerna/listable/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "node_modules/@lerna/log-packed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-4.0.0.tgz", + "integrity": "sha512-+dpCiWbdzgMAtpajLToy9PO713IHoE6GV/aizXycAyA07QlqnkpaBNZ8DW84gHdM1j79TWockGJo9PybVhrrZQ==", + "dev": true, "dependencies": { - "safe-buffer": "^5.0.1" + "byte-size": "^7.0.0", + "columnify": "^1.5.4", + "has-unicode": "^2.0.1", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "node_modules/@lerna/npm-conf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-4.0.0.tgz", + "integrity": "sha512-uS7H02yQNq3oejgjxAxqq/jhwGEE0W0ntr8vM3EfpCW1F/wZruwQw+7bleJQ9vUBjmdXST//tk8mXzr5+JXCfw==", + "dev": true, "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "node_modules/bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "config-chain": "^1.1.12", + "pify": "^5.0.0" + }, "engines": { - "node": "*" + "node": ">= 10.18.0" } }, - "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==", + "node_modules/@lerna/npm-dist-tag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-4.0.0.tgz", + "integrity": "sha512-F20sg28FMYTgXqEQihgoqSfwmq+Id3zT23CnOwD+XQMPSy9IzyLf1fFVH319vXIw6NF6Pgs4JZN2Qty6/CQXGw==", "dev": true, + "dependencies": { + "@lerna/otplease": "4.0.0", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^4.1.2" + }, "engines": { - "node": ">=8" + "node": ">= 10.18.0" } }, - "node_modules/bip32": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-1.0.4.tgz", - "integrity": "sha512-8T21eLWylZETolyqCPgia+MNp+kY37zFr7PTFDTPObHeNi9JlfG4qGIh8WzerIJidtwoK+NsWq2I5i66YfHoIw==", + "node_modules/@lerna/npm-install": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-4.0.0.tgz", + "integrity": "sha512-aKNxq2j3bCH3eXl3Fmu4D54s/YLL9WSwV8W7X2O25r98wzrO38AUN6AB9EtmAx+LV/SP15et7Yueg9vSaanRWg==", + "dev": true, "dependencies": { - "bs58check": "^2.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "tiny-secp256k1": "^1.0.0", - "typeforce": "^1.11.5", - "wif": "^2.0.6" + "@lerna/child-process": "4.0.0", + "@lerna/get-npm-exec-opts": "4.0.0", + "fs-extra": "^9.1.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 10.18.0" } }, - "node_modules/bip39": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", + "node_modules/@lerna/npm-install/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "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/bip44-constants": { - "version": "8.0.103", - "resolved": "https://registry.npmjs.org/bip44-constants/-/bip44-constants-8.0.103.tgz", - "integrity": "sha512-wuGsY9IKUS9GC5Sf/Acb5jLJZI3Z8qsMoQHWldnQyoVUlij4y8e5srh28Iqul1HwK+elPsAYGNYKtYhovjvNxA==" - }, - "node_modules/bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "node_modules/@lerna/npm-install/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "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/@lerna/npm-install/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@lerna/npm-publish": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-4.0.0.tgz", + "integrity": "sha512-vQb7yAPRo5G5r77DRjHITc9piR9gvEKWrmfCH7wkfBnGWEqu7n8/4bFQ7lhnkujvc8RXOsYpvbMQkNfkYibD/w==", + "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "@lerna/otplease": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "fs-extra": "^9.1.0", + "libnpmpublish": "^4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "pify": "^5.0.0", + "read-package-json": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">= 10.18.0" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "node_modules/@lerna/npm-publish/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=10" } }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "node_modules/@lerna/npm-publish/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { - "base-x": "^3.0.2" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "node_modules/@lerna/npm-publish/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "node_modules/@lerna/npm-run-script": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-4.0.0.tgz", + "integrity": "sha512-Jmyh9/IwXJjOXqKfIgtxi0bxi1pUeKe5bD3S81tkcy+kyng/GNj9WSqD5ZggoNP2NP//s4CLDAtUYLdP7CU9rA==", + "dev": true, "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "@lerna/child-process": "4.0.0", + "@lerna/get-npm-exec-opts": "4.0.0", + "npmlog": "^4.1.2" + }, "engines": { - "node": "*" + "node": ">= 10.18.0" } }, - "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==", - "dev": true - }, - "node_modules/buffer-reverse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", - "integrity": "sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=" - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, - "node_modules/caching-transform": { + "node_modules/@lerna/otplease": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-4.0.0.tgz", + "integrity": "sha512-Sgzbqdk1GH4psNiT6hk+BhjOfIr/5KhGBk86CEfHNJTk9BK4aZYyJD4lpDbDdMjIV4g03G7pYoqHzH765T4fxw==", "dev": true, "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" + "@lerna/prompt": "4.0.0" }, "engines": { - "node": ">=8" + "node": ">= 10.18.0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@lerna/output": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-4.0.0.tgz", + "integrity": "sha512-Un1sHtO1AD7buDQrpnaYTi2EG6sLF+KOPEAMxeUYG5qG3khTs2Zgzq5WE3dt2N/bKh7naESt20JjIW6tBELP0w==", "dev": true, + "dependencies": { + "npmlog": "^4.1.2" + }, "engines": { - "node": ">=6" + "node": ">= 10.18.0" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@lerna/pack-directory": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-4.0.0.tgz", + "integrity": "sha512-NJrmZNmBHS+5aM+T8N6FVbaKFScVqKlQFJNY2k7nsJ/uklNKsLLl6VhTQBPwMTbf6Tf7l6bcKzpy7aePuq9UiQ==", "dev": true, + "dependencies": { + "@lerna/get-packed": "4.0.0", + "@lerna/package": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "npm-packlist": "^2.1.4", + "npmlog": "^4.1.2", + "tar": "^6.1.0", + "temp-write": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">= 10.18.0" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001235", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz", - "integrity": "sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==", - "dev": true - }, - "node_modules/cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "node_modules/@lerna/package": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-4.0.0.tgz", + "integrity": "sha512-l0M/izok6FlyyitxiQKr+gZLVFnvxRQdNhzmQ6nRnN9dvBJWn+IxxpM+cLqGACatTnyo9LDzNTOj2Db3+s0s8Q==", + "dev": true, "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" + "load-json-file": "^6.2.0", + "npm-package-arg": "^8.1.0", + "write-pkg": "^4.0.0" }, - "bin": { - "cdl": "bin/cdl.js" + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/catbuffer-typescript": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/catbuffer-typescript/-/catbuffer-typescript-0.1.1.tgz", - "integrity": "sha512-r/z3UKG3YCCdsTEHRXGe3IQxA8OaBRBE31e9du2LOaLStGxYCmxUjfRtJ/DyKfgpS55fJPl3w/VFMnsfwIHmkA==" - }, - "node_modules/chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "node_modules/@lerna/package-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-4.0.0.tgz", + "integrity": "sha512-QED2ZCTkfXMKFoTGoccwUzjHtZMSf3UKX14A4/kYyBms9xfFsesCZ6SLI5YeySEgcul8iuIWfQFZqRw+Qrjraw==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/validation-error": "4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "semver": "^7.3.4" }, "engines": { - "node": ">=4" + "node": ">= 10.18.0" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@lerna/prerelease-id-from-version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-4.0.0.tgz", + "integrity": "sha512-GQqguzETdsYRxOSmdFZ6zDBXDErIETWOqomLERRY54f4p+tk4aJjoVdd9xKwehC9TBfIFvlRbL1V9uQGHh1opg==", + "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "semver": "^7.3.4" }, "engines": { - "node": ">=4" + "node": ">= 10.18.0" } }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@lerna/profiler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-4.0.0.tgz", + "integrity": "sha512-/BaEbqnVh1LgW/+qz8wCuI+obzi5/vRE8nlhjPzdEzdmWmZXuCKyWSEzAyHOJWw1ntwMiww5dZHhFQABuoFz9Q==", + "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2", + "upath": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">= 10.18.0" } }, - "node_modules/chalk/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@lerna/profiler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { - "color-name": "1.1.3" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "node_modules/@lerna/profiler/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/@lerna/profiler/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">= 10.0.0" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "node_modules/@lerna/project": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-4.0.0.tgz", + "integrity": "sha512-o0MlVbDkD5qRPkFKlBZsXZjoNTWPyuL58564nSfZJ6JYNmgAptnWPB2dQlAc7HWRZkmnC2fCkEdoU+jioPavbg==", "dev": true, + "dependencies": { + "@lerna/package": "4.0.0", + "@lerna/validation-error": "4.0.0", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "load-json-file": "^6.2.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" + }, "engines": { - "node": "*" + "node": ">= 10.18.0" } }, - "node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "node_modules/@lerna/project/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">= 8.10.0" + "node": ">=10" }, - "optionalDependencies": { - "fsevents": "~2.3.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "node_modules/@lerna/project/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "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==", + "node_modules/@lerna/prompt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-4.0.0.tgz", + "integrity": "sha512-4Ig46oCH1TH5M7YyTt53fT6TuaKMgqUUaqdgxvp6HP6jtdak6+amcsqB8YGz2eQnw/sdxunx84DfI9XpoLj4bQ==", + "dev": true, "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inquirer": "^7.3.3", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/clean-stack": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.0.tgz", - "integrity": "sha512-RHxtgFvXsRQ+1AM7dlozLDY7ssmvUUh0XEnfnyhYgJTO6beNZHBogiaCwGM9Q3rFrUkYxOtsZRC0zAturg5bjg==", - "dependencies": { - "escape-string-regexp": "4.0.0" + "node_modules/@lerna/publish": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-4.0.0.tgz", + "integrity": "sha512-K8jpqjHrChH22qtkytA5GRKIVFEtqBF6JWj1I8dWZtHs4Jywn8yB1jQ3BAMLhqmDJjWJtRck0KXhQQKzDK2UPg==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "4.0.0", + "@lerna/child-process": "4.0.0", + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "@lerna/log-packed": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/npm-dist-tag": "4.0.0", + "@lerna/npm-publish": "4.0.0", + "@lerna/otplease": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/pack-directory": "4.0.0", + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "@lerna/version": "4.0.0", + "fs-extra": "^9.1.0", + "libnpmaccess": "^4.0.1", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^11.2.6", + "semver": "^7.3.4" }, "engines": { - "node": ">=10" + "node": ">= 10.18.0" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/@lerna/publish/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { - "restore-cursor": "^3.1.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/cli-progress": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.8.2.tgz", - "integrity": "sha512-qRwBxLldMSfxB+YGFgNRaj5vyyHe1yMpVeDL79c+7puGujdKJHQHydgqXDcrkvQgJ5U/d3lpf6vffSoVVUftVQ==", + "node_modules/@lerna/publish/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { - "colors": "^1.1.2", - "string-width": "^4.2.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=4" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/cli-ux": { - "version": "5.4.9", - "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.4.9.tgz", - "integrity": "sha512-4yCKJbFQqNQxf1v0E5T5aBJLt3SbW6dXc/R7zHp4ycdPMg9fAy5f2vhPsWgXEGCMQg+fgN0Sp7EYcZ1XGkFyUA==", + "node_modules/@lerna/publish/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { - "@oclif/command": "^1.6.0", - "@oclif/errors": "^1.2.1", - "@oclif/linewrap": "^1.0.0", - "@oclif/screen": "^1.0.3", - "ansi-escapes": "^4.3.0", - "ansi-styles": "^4.2.0", - "cardinal": "^2.1.1", - "chalk": "^3.0.0", - "clean-stack": "^3.0.0", - "cli-progress": "^3.4.0", - "extract-stack": "^2.0.0", - "fs-extra": "^9.0.1", - "hyperlinker": "^1.0.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "js-yaml": "^3.13.1", - "lodash": "^4.17.11", - "natural-orderby": "^2.0.1", - "object-treeify": "^1.1.4", - "password-prompt": "^1.1.2", - "semver": "^5.6.0", - "string-width": "^4.2.0", - "strip-ansi": "^5.1.0", - "supports-color": "^7.1.0", - "supports-hyperlinks": "^1.0.1", - "tslib": "^2.0.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-ux/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "node_modules/@lerna/publish/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, "engines": { - "node": ">=6" + "node": ">= 10.0.0" } }, - "node_modules/cli-ux/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/@lerna/pulse-till-done": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-4.0.0.tgz", + "integrity": "sha512-Frb4F7QGckaybRhbF7aosLsJ5e9WuH7h0KUkjlzSByVycxY91UZgaEIVjS2oN9wQLrheLMHl6SiFY0/Pvo0Cxg==", + "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "npmlog": "^4.1.2" }, "engines": { - "node": ">=8" + "node": ">= 10.18.0" } }, - "node_modules/cli-ux/node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "node_modules/@lerna/query-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-4.0.0.tgz", + "integrity": "sha512-YlP6yI3tM4WbBmL9GCmNDoeQyzcyg1e4W96y/PKMZa5GbyUvkS2+Jc2kwPD+5KcXou3wQZxSPzR3Te5OenaDdg==", + "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "@lerna/package-graph": "4.0.0" }, "engines": { - "node": ">=10" + "node": ">= 10.18.0" } }, - "node_modules/cli-ux/node_modules/has-flag": { + "node_modules/@lerna/resolve-symlink": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-4.0.0.tgz", + "integrity": "sha512-RtX8VEUzqT+uLSCohx8zgmjc6zjyRlh6i/helxtZTMmc4+6O4FS9q5LJas2uGO2wKvBlhcD6siibGt7dIC3xZA==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2", + "read-cmd-shim": "^2.0.0" + }, "engines": { - "node": ">=8" - } - }, - "node_modules/cli-ux/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": ">= 10.18.0" } }, - "node_modules/cli-ux/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/@lerna/resolve-symlink/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/cli-ux/node_modules/supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "node_modules/@lerna/resolve-symlink/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/cli-ux/node_modules/tslib": { + "node_modules/@lerna/resolve-symlink/node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz", - "integrity": "sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g==" - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">= 10.0.0" } }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "node_modules/@lerna/rimraf-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-4.0.0.tgz", + "integrity": "sha512-QNH9ABWk9mcMJh2/muD9iYWBk1oQd40y6oH+f3wwmVGKYU5YJD//+zMiBI13jxZRtwBx0vmBZzkBkK1dR11cBg==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "@lerna/child-process": "4.0.0", + "npmlog": "^4.1.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/@lerna/run": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-4.0.0.tgz", + "integrity": "sha512-9giulCOzlMPzcZS/6Eov6pxE9gNTyaXk0Man+iCIdGJNMrCnW7Dme0Z229WWP/UoxDKg71F2tMsVVGDiRd8fFQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/npm-run-script": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/profiler": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/timer": "4.0.0", + "@lerna/validation-error": "4.0.0", + "p-map": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">= 10.18.0" } }, - "node_modules/color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "node_modules/@lerna/run-lifecycle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-4.0.0.tgz", + "integrity": "sha512-IwxxsajjCQQEJAeAaxF8QdEixfI7eLKNm4GHhXHrgBu185JcwScFZrj9Bs+PFKxwb+gNLR4iI5rpUdY8Y0UdGQ==", + "dev": true, "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "@lerna/npm-conf": "4.0.0", + "npm-lifecycle": "^3.1.5", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@lerna/run-topologically": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-4.0.0.tgz", + "integrity": "sha512-EVZw9hGwo+5yp+VL94+NXRYisqgAlj0jWKWtAIynDCpghRxCE5GMO3xrQLmQgqkpUl9ZxQFpICgYv5DW4DksQA==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@lerna/query-graph": "4.0.0", + "p-queue": "^6.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">= 10.18.0" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "node_modules/@lerna/run/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@lerna/symlink-binary": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-4.0.0.tgz", + "integrity": "sha512-zualodWC4q1QQc1pkz969hcFeWXOsVYZC5AWVtAPTDfLl+TwM7eG/O6oP+Rr3fFowspxo6b1TQ6sYfDV6HXNWA==", + "dev": true, "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "@lerna/create-symlink": "4.0.0", + "@lerna/package": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, "engines": { - "node": ">=0.1.90" + "node": ">= 10.18.0" } }, - "node_modules/colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "node_modules/@lerna/symlink-binary/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { - "color": "3.0.x", - "text-hex": "1.0.x" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/@lerna/symlink-binary/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">= 0.8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/compress-commons": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", - "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "node_modules/@lerna/symlink-binary/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "node_modules/@lerna/symlink-binary/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 10.0.0" } }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "node_modules/@lerna/symlink-dependencies": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-4.0.0.tgz", + "integrity": "sha512-BABo0MjeUHNAe2FNGty1eantWp8u83BHSeIMPDxNq0MuW2K3CiQRaeWT3EGPAzXpGt0+hVzBrA6+OT0GPn7Yuw==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.1" + "@lerna/create-symlink": "4.0.0", + "@lerna/resolve-symlink": "4.0.0", + "@lerna/symlink-binary": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/coveralls": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz", - "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==", + "node_modules/@lerna/symlink-dependencies/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" - }, - "bin": { - "coveralls": "bin/coveralls.js" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "node_modules/@lerna/symlink-dependencies/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - }, - "bin": { - "crc32": "bin/crc32.njs" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=0.8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "node_modules/@lerna/symlink-dependencies/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/@lerna/symlink-dependencies/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.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/@lerna/timer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-4.0.0.tgz", + "integrity": "sha512-WFsnlaE7SdOvjuyd05oKt8Leg3ENHICnvX3uYKKdByA+S3g+TCz38JsNs7OUZVt+ba63nC2nbXDlUnuT2Xbsfg==", + "dev": true, + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/create-ts-index": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/create-ts-index/-/create-ts-index-1.13.6.tgz", - "integrity": "sha512-vBcuficF62laj/wZv01D4YBz1TXTtEM8hsUq7J1k1uyPUHYq3YTWTVQlmlp+Y311KdM6HhPQeC2aHktvQR8u3w==", + "node_modules/@lerna/validation-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-4.0.0.tgz", + "integrity": "sha512-1rBOM5/koiVWlRi3V6dB863E1YzJS8v41UtsHgMr6gB2ncJ2LsQtMKlJpi3voqcgh41H8UsPXR58RrrpPpufyw==", "dev": true, "dependencies": { - "chalk": "^2.4.1", - "commander": "^2.19.0", - "dayjs": "^1.8.14", - "debug": "^4.1.1", - "deepmerge": "^4.2.2", - "fast-glob": "^3.2.2", - "glob": "^7.1.3", - "json5": "^2.1.3", - "merge": "^1.2.1", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-4.0.0.tgz", + "integrity": "sha512-otUgiqs5W9zGWJZSCCMRV/2Zm2A9q9JwSDS7s/tlKq4mWCYriWo7+wsHEA/nPTMDyYyBO5oyZDj+3X50KDUzeA==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "4.0.0", + "@lerna/child-process": "4.0.0", + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/conventional-commits": "4.0.0", + "@lerna/github-client": "4.0.0", + "@lerna/gitlab-client": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", "minimatch": "^3.0.4", - "my-easy-fp": "^0.5.1", - "tslib": "^1.10.0", - "yargs": "^15.3.1" + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "temp-write": "^4.0.0", + "write-json-file": "^4.3.0" }, - "bin": { - "cti": "dist/cti.js" + "engines": { + "node": ">= 10.18.0" } }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/@lerna/version/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cross-spawn/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/@lerna/version/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/crypto-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", - "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "node_modules/@lerna/version/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "assert-plus": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10" + "node": ">=7.0.0" } }, - "node_modules/dayjs": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.4.tgz", - "integrity": "sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==", + "node_modules/@lerna/version/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "node_modules/@lerna/version/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "node_modules/@lerna/version/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": ">=0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "node_modules/@lerna/version/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "mimic-response": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "node_modules/@lerna/write-log-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-4.0.0.tgz", + "integrity": "sha512-XRG5BloiArpXRakcnPHmEHJp+4AtnhRtpDIHSghmXD5EichI1uD73J7FgPp30mm2pDRq3FdqB0NbwSEsJ9xFQg==", "dev": true, "dependencies": { - "type-detect": "^4.0.0" + "npmlog": "^4.1.2", + "write-file-atomic": "^3.0.3" }, "engines": { - "node": ">=0.12" + "node": ">= 10.18.0" } }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "strip-bom": "^4.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">= 8" } }, - "node_modules/detect-indent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", - "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "node_modules/@npmcli/ci-detect": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", + "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==", + "dev": true + }, + "node_modules/@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", "dev": true, - "engines": { - "node": ">=0.3.1" + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, "dependencies": { - "path-type": "^4.0.0" + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" }, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "node": ">=10" } }, - "node_modules/electron-to-chromium": { - "version": "1.3.749", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz", - "integrity": "sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A==", + "node_modules/@npmcli/node-gyp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", + "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", "dev": true }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "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/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/error-ex": { + "node_modules/@npmcli/promise-spawn": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", "dev": true, "dependencies": { - "is-arrayish": "^0.2.1" + "infer-owner": "^1.0.4" } }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/@npmcli/run-script": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", + "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "infer-owner": "^1.0.4", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" } }, - "node_modules/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "node_modules/@npmcli/run-script/node_modules/node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" }, "bin": { - "eslint": "bin/eslint.js" + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": ">= 10.12.0" } }, - "node_modules/eslint-config-prettier": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", - "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", + "node_modules/@npmcli/run-script/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "dependencies": { - "get-stdin": "^6.0.0" + "abbrev": "1" }, "bin": { - "eslint-config-prettier-check": "bin/cli.js" + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/eslint-plugin-prettier": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", - "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", + "node_modules/@oclif/command": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.0.tgz", + "integrity": "sha512-5vwpq6kbvwkQwKqAoOU3L72GZ3Ta8RRrewKj9OJRolx28KLJJ8Dg9Rf7obRwt5jQA9bkYd8gqzMTrI7H3xLfaw==", "dev": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.3", + "@oclif/plugin-help": "^3", + "debug": "^4.1.1", + "semver": "^7.3.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=8.0.0" + }, + "peerDependencies": { + "@oclif/config": "^1" } }, - "node_modules/eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "node_modules/@oclif/config": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.17.0.tgz", + "integrity": "sha512-Lmfuf6ubjQ4ifC/9bz1fSCHc6F6E653oyaRXxg+lgT4+bYf9bk+nqrUpAbrXyABkCqgIBiFr3J4zR/kiFdE1PA==", "dev": true, "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-wsl": "^2.1.1", + "tslib": "^2.0.0" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/@oclif/dev-cli": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@oclif/dev-cli/-/dev-cli-1.26.0.tgz", + "integrity": "sha512-272udZP+bG4qahoAcpWcMTJKiA+V42kRMqQM7n4tgW35brYb2UP5kK+p08PpF8sgSfRTV8MoJVJG9ax5kY82PA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@oclif/errors": "^1.3.3", + "@oclif/plugin-help": "^3.2.0", + "cli-ux": "^5.2.1", + "debug": "^4.1.1", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^1.2.1", + "lodash": "^4.17.11", + "normalize-package-data": "^3.0.0", + "qqjs": "^0.3.10", + "tslib": "^2.0.3" + }, + "bin": { + "oclif-dev": "bin/run" }, "engines": { - "node": ">=6" + "node": ">=8.10.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/@oclif/errors": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz", + "integrity": "sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==", "dev": true, + "dependencies": { + "clean-stack": "^3.0.0", + "fs-extra": "^8.1", + "indent-string": "^4.0.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } + "node_modules/@oclif/linewrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", + "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==", + "dev": true }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "node_modules/@oclif/parser": { + "version": "3.8.5", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.5.tgz", + "integrity": "sha512-yojzeEfmSxjjkAvMRj0KzspXlMjCfBzNRPkWw8ZwOSoNWoJn+OCS/m/S+yfV6BvAM4u2lTzX9Y5rCbrFIgkJLg==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^2.4.2", + "tslib": "^1.9.3" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "node_modules/@oclif/parser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@oclif/plugin-help": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.2.tgz", + "integrity": "sha512-SPZ8U8PBYK0n4srFjCLedk0jWU4QlxgEYLCXIBShJgOwPhTTQknkUlsEwaMIevvCU4iCQZhfMX+D8Pz5GZjFgA==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "@oclif/command": "^1.5.20", + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.2.2", + "chalk": "^4.1.0", + "indent-string": "^4.0.0", + "lodash.template": "^4.4.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/@oclif/plugin-help/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true, "engines": { - "node": ">= 4" + "node": ">=4" } }, - "node_modules/eslint/node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "node_modules/@oclif/plugin-help/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=6.5.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/@oclif/plugin-help/node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/@oclif/plugin-help/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6" + "node": ">=7.0.0" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/@oclif/plugin-help/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@oclif/plugin-help/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "node_modules/@oclif/plugin-help/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, "engines": { - "node": ">=6.0.0" + "node": ">=4" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "node_modules/@oclif/plugin-help/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "node_modules/@oclif/plugin-help/node_modules/wrap-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", + "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "ansi-styles": "^3.2.0", + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=6" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "node_modules/@oclif/plugin-help/node_modules/wrap-ansi/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=4" } }, - "node_modules/esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "node_modules/@oclif/plugin-help/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "dependencies": { - "estraverse": "^4.1.0" + "ansi-regex": "^3.0.0" }, "engines": { - "node": ">=4.0" + "node": ">=4" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/@oclif/screen": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", + "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=8.0.0" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/@oclif/test": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@oclif/test/-/test-1.2.8.tgz", + "integrity": "sha512-HCh0qPge1JCqTEw4s2ScnicEZd4Ro4/0VvdjpsfCiX6fuDV53fRZ2uqLTgxKGHrVoqOZnVrRZHyhFyEsFGs+zQ==", "dev": true, + "dependencies": { + "fancy-test": "^1.4.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "node_modules/@octokit/auth-token": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", + "integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==", + "dev": true, "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "@octokit/types": "^6.0.3" } }, - "node_modules/ethereum-bloom-filters": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz", - "integrity": "sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg==", + "node_modules/@octokit/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", + "dev": true, "dependencies": { - "js-sha3": "^0.8.0" + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" } }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" } }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "node_modules/@octokit/graphql": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.4.tgz", + "integrity": "sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg==", + "dev": true, + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } }, - "node_modules/execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "node_modules/@octokit/openapi-types": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-8.2.1.tgz", + "integrity": "sha512-BJz6kWuL3n+y+qM8Pv+UGbSxH6wxKf/SBs5yzGufMHwDefsa+Iq7ZGy1BINMD2z9SkXlIzk1qiu988rMuGXEMg==", + "dev": true + }, + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.14.0.tgz", + "integrity": "sha512-S2uEu2uHeI7Vf+Lvj8tv3O5/5TCAa8GHS0dUQN7gdM7vKA6ZHAbR6HkAVm5yMb1mbedLEbxOuQ+Fa0SQ7tCDLA==", "dev": true, "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "@octokit/types": "^6.18.0" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@octokit/core": ">=2" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, - "engines": { - "node": ">=4" + "peerDependencies": { + "@octokit/core": ">=3" } }, - "node_modules/exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "engines": { - "node": ">=0.8" + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.4.1.tgz", + "integrity": "sha512-Nx0g7I5ayAYghsLJP4Q1Ch2W9jYYM0FlWWWZocUro8rNxVwuZXGfFd7Rcqi9XDWepSXjg1WByiNJnZza2hIOvQ==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.18.1", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "node_modules/@octokit/request": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.0.tgz", + "integrity": "sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.1", + "universal-user-agent": "^6.0.0" + } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" } }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/@octokit/rest": { + "version": "18.6.7", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.6.7.tgz", + "integrity": "sha512-Kn6WrI2ZvmAztdx+HEaf88RuJn+LK72S8g6OpciE4kbZddAN84fu4fiPGxcEu052WmqKVnA/cnQsbNlrYC6rqQ==", + "dev": true, "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" + "@octokit/core": "^3.5.0", + "@octokit/plugin-paginate-rest": "^2.6.2", + "@octokit/plugin-request-log": "^1.0.2", + "@octokit/plugin-rest-endpoint-methods": "5.4.1" } }, - "node_modules/extract-stack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz", - "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==", - "engines": { - "node": ">=8" + "node_modules/@octokit/types": { + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.18.1.tgz", + "integrity": "sha512-5YsddjO1U+xC8ZYKV8yZYebW55PCc7qiEEeZ+wZRr6qyclynzfyD65KZ5FdtIeP0/cANyFaD7hV69qElf1nMsQ==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^8.2.1" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, - "engines": [ - "node >=0.6.0" - ] + "dependencies": { + "type-detect": "4.0.8" + } }, - "node_modules/fancy-test": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/fancy-test/-/fancy-test-1.4.10.tgz", - "integrity": "sha512-AaUX6wKS7D5OP2YK2q5G7c8PGx2lgoyLUD7Bbg8z323sb9aebBqzb9UN6phzI73UgO/ViihmNfOxF3kdfZLhew==", + "node_modules/@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "dependencies": { - "@types/chai": "*", - "@types/lodash": "*", - "@types/node": "*", - "@types/sinon": "*", - "lodash": "^4.17.13", - "mock-stdin": "^1.0.0", - "nock": "^13.0.0", - "stdout-stderr": "^0.1.9" - }, + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">= 6" } }, - "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/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", "dev": true }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", "dev": true }, - "node_modules/fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8" - } + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/@tsconfig/node16": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", + "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", "dev": true }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "node_modules/@types/archiver": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.1.tgz", + "integrity": "sha512-heuaCk0YH5m274NOLSi66H1zX6GtZoMsdE6TYFcpFFjBjg0FoU4i4/M/a/kNlgNg26Xk3g364mNOYe1JaiEPOQ==", + "dev": true, + "dependencies": { + "@types/glob": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", + "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", "dev": true }, - "node_modules/fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + "node_modules/@types/figlet": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.5.2.tgz", + "integrity": "sha512-1+taqbVokkR79F0KYwgUMqNoWlpiXPxYPCim7Idtw9kZ+tj8JtLwFyumF5UOBFB3dQHUzxLQrA/WA8qPppPm6w==", + "dev": true }, - "node_modules/fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "node_modules/@types/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "dev": true, "dependencies": { - "reusify": "^1.0.4" + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/fecha": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz", - "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==" + "node_modules/@types/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==", + "dev": true, + "dependencies": { + "@types/through": "*", + "rxjs": "^6.4.0" + } }, - "node_modules/figlet": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", - "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==", - "engines": { - "node": ">= 0.4.0" + "node_modules/@types/js-yaml": { + "version": "3.12.7", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz", + "integrity": "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.171", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz", + "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "15.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.1.tgz", + "integrity": "sha512-wF6hazbsnwaW3GhK4jFuw5NaLDQVRQ6pWQUGAUrJzxixFkTaODSiAKMPXuHwPEPkAKQWHAzj6uJ5h+3zU9gQxg==", + "dev": true + }, + "node_modules/@types/node-fetch": { + "version": "2.5.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.11.tgz", + "integrity": "sha512-2upCKaqVZETDRb8A2VTaRymqFBEgH8u6yr96b/u3+1uQEPDRo3mJLEiPk7vdXBHRtjwkjqzFYMJXrt0Z9QsYjQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, "dependencies": { - "escape-string-regexp": "^1.0.5" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-4g1jrL98mdOIwSOUh6LTlB0Cs9I0dQPwINUhBg7C6pN4HLr8GS8xsksJxilW6S6dQHVi2K/o+lQuQcg7LroCnw==", + "dev": true + }, + "node_modules/@types/sinon": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.2.tgz", + "integrity": "sha512-BHn8Bpkapj8Wdfxvh2jWIUoaYB/9/XhsL0oOvBfRagJtKlSl9NWPcFOz2lRukI9szwGxFtYZCTejJSqsGDbdmw==", + "dev": true, + "dependencies": { + "@sinonjs/fake-timers": "^7.1.0" } }, - "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "node_modules/@types/through": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", + "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.2.tgz", + "integrity": "sha512-PGqpLLzHSxq956rzNGasO3GsAPf2lY9lDUBXhS++SKonglUmJypaUtcKzRtUte8CV7nruwnDxtLUKpVxs0wQBw==", "dev": true, "dependencies": { - "flat-cache": "^2.0.1" + "@typescript-eslint/experimental-utils": "4.28.2", + "@typescript-eslint/scope-manager": "4.28.2", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz", + "integrity": "sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ==", + "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.28.2", + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/typescript-estree": "4.28.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" } }, - "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "node_modules/@typescript-eslint/parser": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.2.tgz", + "integrity": "sha512-Q0gSCN51eikAgFGY+gnd5p9bhhCUAl0ERMiDKrTzpSoMYRubdB8MJrTTR/BBii8z+iFwz8oihxd0RAdP4l8w8w==", "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "@typescript-eslint/scope-manager": "4.28.2", + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/typescript-estree": "4.28.2", + "debug": "^4.3.1" }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz", + "integrity": "sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/visitor-keys": "4.28.2" }, "engines": { - "node": ">=8" + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/@typescript-eslint/types": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.2.tgz", + "integrity": "sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA==", "dev": true, - "bin": { - "flat": "cli.js" + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz", + "integrity": "sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg==", "dev": true, "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/visitor-keys": "4.28.2", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz", + "integrity": "sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "@typescript-eslint/types": "4.28.2", + "eslint-visitor-keys": "^2.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + "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==", + "dev": true }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.4.0" } }, - "node_modules/foreground-child/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "debug": "4" }, "engines": { - "node": ">= 8" + "node": ">= 6.0.0" } }, - "node_modules/foreground-child/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, "engines": { - "node": ">=8" + "node": ">= 8.0.0" } }, - "node_modules/foreground-child/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/foreground-child/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/aggregate-error/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/foreground-child/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">= 8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "type-fest": "^0.21.3" }, "engines": { - "node": ">= 0.12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=8" } }, - "node_modules/fs-extra/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.6" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, "engines": { - "node": ">= 4.0.0" + "node": ">= 8" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "default-require-extensions": "^3.0.0" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=8" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, - "node_modules/futoin-hkdf": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.3.3.tgz", - "integrity": "sha512-oR75fYk3B3X9/B02Y6vusrBKucrpC6VjxhRL+C6B7FwUpuSRHbhBNG3AZbcE/xPyJmEQWsyqUFp3VeNNbA3S7A==", - "engines": { - "node": ">=8" - } + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "engines": { - "node": "*" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "engines": { - "node": ">=8.0.0" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true, - "dependencies": { - "emoji-regex": ">=6.0.0 <=6.1.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/github-slugger/node_modules/emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "safer-buffer": "~2.1.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" - }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, "engines": { - "node": ">= 6" - } - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "node": ">=0.8" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, "engines": { - "node": ">=4.x" + "node": ">= 4.0.0" } }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": "*" } }, - "node_modules/handlebars/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/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } + "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==", + "dev": true }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "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==", + "dev": true, + "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/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" + "tweetnacl": "^0.14.3" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, + "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==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "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==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "dependencies": { + "buffer": "^5.5.0", "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" + "readable-stream": "^3.4.0" } }, - "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==", + "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==", + "dev": true, "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" + "fill-range": "^7.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/hasha/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, "engines": { - "node": ">=8" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, - "bin": { - "he": "bin/he" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "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/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "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==", "dev": true }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, - "node_modules/http-call": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz", - "integrity": "sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==", + "node_modules/byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", "dev": true, - "dependencies": { - "content-type": "^1.0.4", - "debug": "^4.1.1", - "is-retry-allowed": "^1.1.0", - "is-stream": "^2.0.0", - "parse-json": "^4.0.0", - "tunnel-agent": "^0.6.0" - }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/http-call/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "node_modules/byte-size": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", + "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "node_modules/cacache": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", + "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">= 10" } }, - "node_modules/hyperlinker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", - "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", + "node_modules/cacache/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/cacache/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "engines": { - "node": ">= 4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "engines": { - "node": ">=0.8.19" + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "node": ">=6" } }, - "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/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "node_modules/caniuse-lite": { + "version": "1.0.30001243", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz", + "integrity": "sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" + "bin": { + "cdl": "bin/cdl.js" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "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==", + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==", + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "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/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "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==", + "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==", + "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "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": ">=0.10.0" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, - "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/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", "dev": true, + "dependencies": { + "escape-string-regexp": "4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "node_modules/clean-stack/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "node_modules/cli-progress": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", + "integrity": "sha512-g7rLWfhAo/7pF+a/STFH/xPyosaL1zgADhI0OM83hl3c7S43iGvJWEAV2QuDOnQ8i6EMBj/u4+NTd0d5L+4JfA==", "dev": true, + "dependencies": { + "colors": "^1.1.2", + "string-width": "^4.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/cli-ux": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.6.3.tgz", + "integrity": "sha512-/oDU4v8BiDjX2OKcSunGH0iGDiEtj2rZaGyqNuv9IT4CgcSMyVWAMfn0+rEHaOc4n9ka78B0wo1+N1QX89f7mw==", + "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "@oclif/command": "^1.6.0", + "@oclif/errors": "^1.2.1", + "@oclif/linewrap": "^1.0.0", + "@oclif/screen": "^1.0.3", + "ansi-escapes": "^4.3.0", + "ansi-styles": "^4.2.0", + "cardinal": "^2.1.1", + "chalk": "^4.1.0", + "clean-stack": "^3.0.0", + "cli-progress": "^3.4.0", + "extract-stack": "^2.0.0", + "fs-extra": "^8.1", + "hyperlinker": "^1.0.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "js-yaml": "^3.13.1", + "lodash": "^4.17.11", + "natural-orderby": "^2.0.1", + "object-treeify": "^1.1.4", + "password-prompt": "^1.1.2", + "semver": "^7.3.2", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "supports-color": "^8.1.0", + "supports-hyperlinks": "^2.1.0", + "tslib": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "node_modules/cli-ux/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "node_modules/cli-ux/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "dependencies": { - "append-transform": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "node_modules/cli-ux/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/cli-ux/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "node_modules/cli-ux/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cli-ux/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - }, "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-processinfo/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/cli-ux/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/istanbul-lib-processinfo/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/istanbul-lib-processinfo/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/istanbul-lib-processinfo/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/istanbul-lib-processinfo/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "isobject": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "node_modules/cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "mkdirp-infer-owner": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps/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==", + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" + "color-name": "1.1.3" } }, - "node_modules/js-sha256": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", - "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" - }, - "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/js-sha512": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", - "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "node_modules/columnify/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/columnify/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "node_modules/json-stable-stringify-without-jsonify": { + "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } }, - "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "node_modules/compare-func/node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" + "is-obj": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "dependencies": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, "engines": [ - "node >=0.6.0" + "node >= 6.0" ], "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" } }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } }, - "node_modules/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", + "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", + "dev": true, "dependencies": { - "readable-stream": "^2.0.5" + "compare-func": "^2.0.0", + "q": "^1.5.1" }, "engines": { - "node": ">= 0.6.3" + "node": ">=10" } }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/conventional-changelog-core": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.3.tgz", + "integrity": "sha512-MwnZjIoMRL3jtPH5GywVNqetGILC7g6RQFvdb8LRU/fA/338JbeWAku3PZ8yQ+mtVRViiISqJlb0sOz0htBZig==", + "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/conventional-changelog-writer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", + "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", + "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { - "lcov-parse": "bin/cli.js" + "semver": "bin/semver.js" } }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" } }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "node_modules/conventional-commits-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", + "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0", + "trim-off-newlines": "^1.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", - "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "node_modules/lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", - "dev": true - }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "node_modules/coveralls": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", + "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", + "dev": true, "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.5", + "request": "^2.88.2" + }, + "bin": { + "coveralls": "bin/coveralls.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "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==", + "dev": true + }, + "node_modules/create-ts-index": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/create-ts-index/-/create-ts-index-1.13.6.tgz", + "integrity": "sha512-vBcuficF62laj/wZv01D4YBz1TXTtEM8hsUq7J1k1uyPUHYq3YTWTVQlmlp+Y311KdM6HhPQeC2aHktvQR8u3w==", + "dev": true, "dependencies": { - "lodash._reinterpolate": "^3.0.0" + "chalk": "^2.4.1", + "commander": "^2.19.0", + "dayjs": "^1.8.14", + "debug": "^4.1.1", + "deepmerge": "^4.2.2", + "fast-glob": "^3.2.2", + "glob": "^7.1.3", + "json5": "^2.1.3", + "merge": "^1.2.1", + "minimatch": "^3.0.4", + "my-easy-fp": "^0.5.1", + "tslib": "^1.10.0", + "yargs": "^15.3.1" + }, + "bin": { + "cti": "dist/cti.js" } }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + "node_modules/create-ts-index/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, - "node_modules/log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=0.8.6" + "node": ">= 8" } }, - "node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, - "dependencies": { - "chalk": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "assert-plus": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10" } }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/dayjs": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.6.tgz", + "integrity": "sha512-AztC/IOW4L1Q41A86phW5Thhcrco3xuAA+YX/BLpLWWjRcTj5TOt/QImBLmCKlrF7u7k47arTnOyL6GnbG8Hvw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "ms": "2.1.2" }, "engines": { - "node": ">=8" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/logform": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", - "dependencies": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true, + "engines": { + "node": "*" } }, - "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/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, - "dependencies": { - "yallist": "^3.0.2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "dependencies": { - "semver": "^6.0.0" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=0.10.0" } }, - "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==", - "dev": true - }, - "node_modules/marked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.0.tgz", - "integrity": "sha512-NqRSh2+LlN2NInpqTQnS614Y/3NkVMFFU6sJlRFEpxJ/LHuK/qJECH7/fXZjk4VZstPW/Pevjil/VtSONsLc7Q==", + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, - "bin": { - "marked": "bin/marked" - }, "engines": { - "node": ">= 8.16.2" + "node": ">=0.10" } }, - "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/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, "engines": { - "node": ">= 0.10.0" + "node": ">=0.12" } }, - "node_modules/merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/merkletreejs": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.18.tgz", - "integrity": "sha512-f8bSFaUDPZhot94xkjb83XbG1URaiNLxZy6LWTw2IzbQeCA4YX/UxublGxXdLQIYXbWkDghq6EqwG5u4I7ELmA==", + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, "dependencies": { - "bignumber.js": "^9.0.1", - "buffer-reverse": "^1.0.1", - "crypto-js": "^3.1.9-1", - "treeify": "^1.1.0", - "web3-utils": "^1.3.4" + "strip-bom": "^4.0.0" }, "engines": { - "node": ">= 7.6.0" + "node": ">=8" } }, - "node_modules/merkletreejs/node_modules/crypto-js": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", - "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } }, - "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "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==", + "dev": true, "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "object-keys": "^1.0.12" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=0.4.0" } }, - "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, - "dependencies": { - "mime-db": "1.44.0" - }, "engines": { "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "node_modules/dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, "dependencies": { - "dom-walk": "^0.1.0" + "asap": "^2.0.0", + "wrappy": "1" } }, - "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/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } }, - "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/dir-compare": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", + "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", + "dev": true, + "dependencies": { + "buffer-equal": "^1.0.0", + "minimatch": "^3.0.4" + } }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "path-type": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "minimist": "^1.2.5" + "esutils": "^2.0.2" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/mocha": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", - "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dev": true, "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "is-obj": "^2.0.0" }, "engines": { - "node": ">= 10.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha-lcov-reporter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mocha-lcov-reporter/-/mocha-lcov-reporter-1.3.0.tgz", - "integrity": "sha1-Rpve9PivyaEWBW8HnfYYLQr7A4Q=", + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, - "engines": { - "node": ">= 0.6.0" + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/electron-to-chromium": { + "version": "1.3.770", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.770.tgz", + "integrity": "sha512-Kyh8DGK1KfEZuYKIHvuOmrKotsKZQ+qBkDIWHciE3QoFkxXB1KzPP+tfLilSHAfxTON0yYMnFCWkQtUOR7g6KQ==", "dev": true }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", + "dev": true + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "optional": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "iconv-lite": "^0.6.2" } }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "optional": true, "dependencies": { - "ms": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=0.10.0" } }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "ansi-colors": "^4.1.1" }, "engines": { - "node": ">=10" + "node": ">=8.6" } }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" + "envinfo": "dist/cli.js" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/mocha/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/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "is-arrayish": "^0.2.1" } }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mocha/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/mocha/node_modules/y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { - "node": ">=10" + "node": ">=0.8.0" } }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/eslint": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", + "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", "dev": true, "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.2", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">=10" + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, - "engines": { - "node": ">=10" + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/mock-stdin": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mock-stdin/-/mock-stdin-1.0.0.tgz", - "integrity": "sha512-tukRdb9Beu27t6dN+XztSRHq9J0B/CoAOySGzHfn8UTfmqipA5yNT/sDUEyYdAV3Hpka6Wx6kOMxuObdOex60Q==", - "dev": true + "node_modules/eslint-plugin-header": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", + "integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==", + "dev": true, + "peerDependencies": { + "eslint": ">=7.7.0" + } }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "node_modules/eslint-plugin-prettier": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", + "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, "engines": { - "node": "*" + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "node_modules/my-easy-fp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/my-easy-fp/-/my-easy-fp-0.5.1.tgz", - "integrity": "sha512-musRCJYBnEDDzod5ugUykOqHoZYudhtC90J536tFrMqXfjpBzb0PRzLkadM2chgNFsCebzm9GtC+qjQ7xKgpGg==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "tslib": "1.11.1" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/my-easy-fp/node_modules/tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" + "dependencies": { + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/natural-orderby": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", - "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==", + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node_modules/noble-ed25519": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.0.3.tgz", - "integrity": "sha512-6pOngnpa/GVYURFvE7igoRKm3RrNwQykVLjSCjTvmUdAyOokes75trVDYoi+CGwF8/jh9hWl2zF4ix9OlB9OIQ==" - }, - "node_modules/nock": { - "version": "13.0.11", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.0.11.tgz", - "integrity": "sha512-sKZltNkkWblkqqPAsjYW0bm3s9DcHRPiMOyKO/PkfJ+ANHZ2+LA2PLe22r4lLrKgXaiSaDQwW3qGsJFtIpQIeQ==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", - "propagate": "^2.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 10.13" - } - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">= 6.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "process-on-spawn": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/node-stream-zip": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.5.tgz", - "integrity": "sha512-Lfi9xhSNvnJU35+4ZFlECXKJ70etAgJYWAVCdcEpksPnMrgwNqwkCJqdunoViVoFFV38C7AIodYE+2apuoK9Gw==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "bin": { - "semver": "bin/semver" + "engines": { + "node": ">=4" } }, - "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==", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "path-key": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" } }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=8.9" + "node": ">=0.10" } }, - "node_modules/nyc/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/nyc/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "estraverse": "^5.2.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=4.0" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, "engines": { - "node": "*" + "node": ">=4.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4.0" } }, - "node_modules/object-treeify": { - "version": "1.1.26", - "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.26.tgz", - "integrity": "sha512-0WTfU7SGM8umY4YPpOg+oHXL66E6dPVCr+sMR6KitPmvg8CkVrHUUZYEFtx0+5Wb0HjFEsBwBYXyGRNeX7c/oQ==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "engines": { - "node": ">= 10" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" + "node": ">=0.10.0" } }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dependencies": { - "fn.name": "1.x.x" - } + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/onigasm": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz", - "integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==", - "dev": true, - "dependencies": { - "lru-cache": "^5.1.1" + "node": ">=4" } }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": ">= 0.8.0" + "node": ">=4.8" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "node_modules/execa/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "node_modules/execa/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/execa/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "bin": { + "semver": "bin/semver" } }, - "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "dependencies": { - "aggregate-error": "^3.0.0" + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" + "isexe": "^2.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "which": "bin/which" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "dependencies": { - "callsites": "^3.0.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/password-prompt": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", - "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", - "dependencies": { - "ansi-escapes": "^3.1.0", - "cross-spawn": "^6.0.5" + "node": ">=0.6.0" } }, - "node_modules/password-prompt/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "node_modules/extract-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz", + "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true, - "engines": { - "node": ">=8" - } + "engines": [ + "node >=0.6.0" + ] }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "node_modules/fancy-test": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/fancy-test/-/fancy-test-1.4.10.tgz", + "integrity": "sha512-AaUX6wKS7D5OP2YK2q5G7c8PGx2lgoyLUD7Bbg8z323sb9aebBqzb9UN6phzI73UgO/ViihmNfOxF3kdfZLhew==", + "dev": true, + "dependencies": { + "@types/chai": "*", + "@types/lodash": "*", + "@types/node": "*", + "@types/sinon": "*", + "lodash": "^4.17.13", + "mock-stdin": "^1.0.0", + "nock": "^13.0.0", + "stdout-stderr": "^0.1.9" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "engines": { - "node": ">=4" - } + "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==", + "dev": true }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/fast-glob": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, "engines": { "node": ">=8" } }, - "node_modules/pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", "dev": true, - "engines": { - "node": "*" + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, "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" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=0.12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, "engines": { - "node": ">=8.6" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { - "find-up": "^4.0.0" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/prettier": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "fast-diff": "^1.1.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/prettier-plugin-organize-imports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-1.1.1.tgz", - "integrity": "sha512-rFA1lnek1FYkMGthm4xBKME41qUKItTovuo24bCGZu/Vu1n3gW71UPLAkIdwewwkZCe29gRVweSOPXvAdckFuw==", - "dev": true + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2" + } }, - "node_modules/printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, "bin": { - "printj": "bin/printj.njs" - }, - "engines": { - "node": ">=0.8" + "flat": "cli.js" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">= 0.6.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "node_modules/flatted": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", + "dev": true }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "dependencies": { - "fromentries": "^1.2.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true, "engines": { - "node": ">=0.4.0" + "node": "*" } }, - "node_modules/propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">= 8" + "node": ">= 0.12" } }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "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/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qqjs": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/qqjs/-/qqjs-0.3.11.tgz", - "integrity": "sha512-pB2X5AduTl78J+xRSxQiEmga1jQV0j43jOPs/MTgTLApGFEOn6NgdE2dEjp7nvDtjkIOZbvFIojAiYUx6ep3zg==", + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "dependencies": { - "chalk": "^2.4.1", - "debug": "^4.1.1", - "execa": "^0.10.0", - "fs-extra": "^6.0.1", - "get-stream": "^5.1.0", - "glob": "^7.1.2", - "globby": "^10.0.1", - "http-call": "^5.1.2", - "load-json-file": "^6.2.0", - "pkg-dir": "^4.2.0", - "tar-fs": "^2.0.0", - "tmp": "^0.1.0", - "write-json-file": "^4.1.1" + "minipass": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 8" } }, - "node_modules/qqjs/node_modules/fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": 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==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/qqjs/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "dependencies": { - "graceful-fs": "^4.1.6" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, - "node_modules/qqjs/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">=0.10.0" } }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "node_modules/gauge/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, "engines": { - "node": ">=0.6" + "node": ">=0.10.0" } }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "dependencies": { - "safe-buffer": "^5.1.0" + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.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" - }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "engines": { - "node": ">= 6" + "node": ">=6.9.0" } }, - "node_modules/readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", - "dependencies": { - "minimatch": "^3.0.4" + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, "engines": { - "node": ">=8.10.0" + "node": "*" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, "dependencies": { - "resolve": "^1.1.6" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, "engines": { - "node": ">= 0.10" + "node": ">=8.0.0" } }, - "node_modules/redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "node_modules/get-pkg-repo": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.1.2.tgz", + "integrity": "sha512-/FjamZL9cBYllEbReZkxF2IMh80d8TJoC4e3bmLNif8ibHw95aj0N/tzqK0kZz9eU/3w3dL6lF4fnnX/sDdW3A==", + "dev": true, "dependencies": { - "esprima": "~4.0.0" + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "meow": "^7.0.0", + "through2": "^2.0.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "node_modules/get-pkg-repo/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "node_modules/get-pkg-repo/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "es6-error": "^4.0.1" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "node_modules/get-pkg-repo/node_modules/meow": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", + "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", "dev": true, "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "node_modules/get-pkg-repo/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "node_modules/get-pkg-repo/node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/get-pkg-repo/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/get-pkg-repo/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/get-pkg-repo/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/get-pkg-repo/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=8" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "node_modules/get-pkg-repo/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/get-pkg-repo/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, "engines": { - "node": ">=0.12.0" + "node": ">=8" } }, - "node_modules/run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" - }, - "node_modules/rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dependencies": { - "tslib": "^1.9.0" - }, + "node_modules/get-pkg-repo/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, "engines": { - "npm": ">=2.0.0" + "node": ">=8" } }, - "node_modules/rxjs-compat": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", - "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.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==" + "node_modules/get-pkg-repo/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/get-pkg-repo/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/get-pkg-repo/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "dependencies": { - "randombytes": "^2.1.0" + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } }, - "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==", + "node_modules/git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" }, "bin": { - "sha.js": "bin.js" + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "dev": true, "dependencies": { - "shebang-regex": "^1.0.0" + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "node_modules/git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "meow": "^8.0.0", + "semver": "^6.0.0" }, "bin": { - "shjs": "bin/shjs" + "git-semver-tags": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/shiki": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.3.tgz", - "integrity": "sha512-NEjg1mVbAUrzRv2eIcUt3TG7X9svX7l3n3F5/3OdFq+/BxUdmBOeKGiH4icZJBLHy354Shnj6sfBTemea2e7XA==", + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "onigasm": "^2.2.5", - "vscode-textmate": "^5.2.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/shx": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.2.tgz", - "integrity": "sha512-aS0mWtW3T2sHAenrSrip2XGv39O9dXIFUqxAEWHEOS1ePtGIBavdPJY1kE2IHl14V/4iCbUiNDPGdyYTtmhSoA==", + "node_modules/git-up": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.5.tgz", + "integrity": "sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==", + "dev": true, "dependencies": { - "es6-object-assign": "^1.0.3", - "minimist": "^1.2.0", - "shelljs": "^0.8.1" - }, - "bin": { - "shx": "lib/cli.js" - }, - "engines": { - "node": ">=4" + "is-ssh": "^1.3.0", + "parse-url": "^6.0.0" } }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "node_modules/simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "node_modules/git-url-parse": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.5.0.tgz", + "integrity": "sha512-TZYSMDeM37r71Lqg1mbnMlOqlHd7BSij9qN7XwTkRqSAYFMihGLGhfHwgqQob3GUhEneKnV4nskN9rbQw2KGxA==", + "dev": true, "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "git-up": "^4.0.0" } }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, "dependencies": { - "is-arrayish": "^0.3.1" + "ini": "^1.3.2" } }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" + "node_modules/github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", + "dev": true, + "dependencies": { + "emoji-regex": ">=6.0.0 <=6.1.1" } }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=6" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "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==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sort-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.0.0.tgz", - "integrity": "sha512-hlJLzrn/VN49uyNkZ8+9b+0q9DjmmYcYOnbMQtpkLrYpPwRApDPZfmqbUfJnAA3sb/nRib+nDot7Zi/1ER1fuA==", + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "dependencies": { - "is-plain-obj": "^2.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "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==", + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/source-map-support/node_modules/source-map": { + "node_modules/handlebars/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==", @@ -6218,2031 +6866,8554 @@ "node": ">=0.10.0" } }, - "node_modules/spawn-wrap": { + "node_modules/har-schema": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true, - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/spawn-wrap/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dev": true, "dependencies": { - "glob": "^7.1.3" + "ajv": "^6.12.3", + "har-schema": "^2.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=6" } }, - "node_modules/spawn-wrap/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stdout-stderr": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/stdout-stderr/-/stdout-stderr-0.1.13.tgz", - "integrity": "sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==", + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "strip-ansi": "^6.0.0" + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "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/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" } }, - "node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-call": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz", + "integrity": "sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==", + "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "content-type": "^1.0.4", + "debug": "^4.1.1", + "is-retry-allowed": "^1.1.0", + "is-stream": "^2.0.0", + "parse-json": "^4.0.0", + "tunnel-agent": "^0.6.0" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, "dependencies": { - "is-hex-prefixed": "1.0.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">= 6" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10.17.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==", + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, + "ms": "^2.0.0" + } + }, + "node_modules/hyperlinker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", + "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", + "dev": true, "engines": { "node": ">=4" } }, - "node_modules/supports-hyperlinks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "dependencies": { - "has-flag": "^2.0.0", - "supports-color": "^5.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "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/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/symbol-hd-wallets": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/symbol-hd-wallets/-/symbol-hd-wallets-0.14.1.tgz", - "integrity": "sha512-jMYbVHlGtB9IiufME4nGDKEvYXz7e6YfBK0eulGhetMH/0TZ+qIomCmNaMU2EfJEeywo0Kb6TIMIN4AEq9ObBA==", + "node_modules/ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, "dependencies": { - "bip32": "^1.0.4", - "bip39": "^3.0.2", - "bip44-constants": "^8.0.5", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "crypto-js": "^4.0.0", - "js-sha3": "^0.8.0", - "tiny-secp256k1": "^1.1.3", - "tweetnacl": "^1.0.3" - } - }, - "node_modules/symbol-openapi-typescript-fetch-client": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/symbol-openapi-typescript-fetch-client/-/symbol-openapi-typescript-fetch-client-0.11.2.tgz", - "integrity": "sha512-A1MAN8/UWlaCEibBf6zxkduZwDNSvWwLPp6JB0GeYI/FAOrw/9nLyuS/NJQ3siGAUclnuejH1wG7KdUg0/4RSw==" - }, - "node_modules/symbol-sdk": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-sdk/-/symbol-sdk-1.0.1.tgz", - "integrity": "sha512-G4sdGBfggTSqKs9XchMQAtOfl80Z2eARafxZnzje5qxzfUSQUCFYdBP7IJiA2PDoeyfXJJpzWWTlgq9EzvKm1A==", - "dependencies": { - "@js-joda/core": "^3.2.0", - "bluebird": "^3.7.2", - "catbuffer-typescript": "0.1.1", - "crypto-js": "^4.0.0", - "diff": "^4.0.2", - "futoin-hkdf": "^1.3.2", - "js-sha256": "^0.9.0", - "js-sha3": "^0.8.0", - "js-sha512": "^0.8.0", - "long": "^4.0.0", - "merkletreejs": "^0.2.9", - "minimist": "^1.2.5", - "node-fetch": "^2.6.0", - "ripemd160": "^2.0.2", - "rxjs": "^6.6.3", - "rxjs-compat": "^6.6.3", - "symbol-openapi-typescript-fetch-client": "0.11.2", - "tweetnacl": "^1.0.3", - "utf8": "^2.1.2", - "ws": "^7.3.1" + "minimatch": "^3.0.4" } }, - "node_modules/symbol-sdk/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { - "node": ">=0.3.1" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "node_modules/import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/table/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.8.19" } }, - "node_modules/table/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/init-package-json": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.3.tgz", + "integrity": "sha512-tk/gAgbMMxR6fn1MgMaM1HpU1ryAmBWWitnxG5OhuNXeX0cbpbgV5jA4AIpQJVNoyOfOevTtO6WX+rPs+EFqaQ==", "dev": true, "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "glob": "^7.1.1", + "npm-package-arg": "^8.1.2", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^3.0.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/table/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tiny-secp256k1": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz", - "integrity": "sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.3.0", - "bn.js": "^4.11.8", - "create-hmac": "^1.1.7", - "elliptic": "^6.4.0", - "nan": "^2.13.2" - }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "rimraf": "^2.6.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "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/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "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==", "dev": true, "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=0.8" - } - }, - "node_modules/treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", - "engines": { - "node": ">=0.6" + "node": ">=8" } }, - "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "node_modules/ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "dev": true, "dependencies": { - "arg": "^4.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" + "call-bind": "^1.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true, "engines": { - "node": ">=0.3.1" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "dependencies": { - "tslib": "^1.8.1" + "ci-info": "^2.0.0" }, - "engines": { - "node": ">= 6" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "dependencies": { - "safe-buffer": "^5.0.1" + "has": "^1.0.3" }, - "engines": { - "node": "*" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "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=", + "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/typedoc": { - "version": "0.20.34", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.20.34.tgz", - "integrity": "sha512-es+N/KyGPcHl9cAuYh1Z5m7HzwcmfNLghkmb2pzGz7HRDS5GS2uA3hu/c2cv4gCxDsw8pPUPCOvww+Hzf48Kug==", + "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==", "dev": true, "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^9.1.0", - "handlebars": "^4.7.7", - "lodash": "^4.17.21", - "lunr": "^2.3.9", - "marked": "^2.0.1", - "minimatch": "^3.0.0", - "progress": "^2.0.3", - "shelljs": "^0.8.4", - "shiki": "^0.9.3", - "typedoc-default-themes": "^0.12.9" - }, - "bin": { - "typedoc": "bin/typedoc" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">= 10.8.0" + "node": ">=0.10.0" } }, - "node_modules/typedoc-default-themes": { - "version": "0.12.10", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", - "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedoc/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "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==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=10" + "node": ">=0.12.0" } }, - "node_modules/typedoc/node_modules/marked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.1.tgz", - "integrity": "sha512-5+/fKgMv2hARmMW7DOpykr2iLhl0NgjyELk5yn92iE7z8Se1IS9n3UsFm86hFXIkvMBmVxki8+ckcpjBeyo/hw==", + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", "dev": true, - "bin": { - "marked": "bin/marked" - }, "engines": { - "node": ">= 8.16.2" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedoc/node_modules/universalify": { + "node_modules/is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">=8" } }, - "node_modules/typeforce": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", - "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, "engines": { - "node": ">=4.2.0" + "node": ">=0.10.0" } }, - "node_modules/uglify-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.1.tgz", - "integrity": "sha512-RjxApKkrPJB6kjJxQS3iZlf///REXWYxYJxO/MpmlQzVkDWVI3PSnCBWezMecmTU/TRkNxrl8bmsfFQCp+LO+Q==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/underscore": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" - }, - "node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">=0.10.0" } }, - "node_modules/uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "node_modules/is-ssh": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.3.tgz", + "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", "dev": true, "dependencies": { - "punycode": "^2.1.0" + "protocols": "^1.1.0" } }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "node_modules/utf8": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", - "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" - }, - "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/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, - "bin": { - "uuid": "bin/uuid" + "engines": { + "node": ">=8" } }, - "node_modules/v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, - "engines": [ - "node >=0.6.0" - ], "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/vscode-textmate": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.4.0.tgz", - "integrity": "sha512-c0Q4zYZkcLizeYJ3hNyaVUM2AA8KDhNCA3JvXY8CeZSJuBdAy3bAvSbv46RClC4P3dSO9BdwhnKEx2zOo6vP/w==", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "node_modules/web3-utils": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.3.6.tgz", - "integrity": "sha512-hHatFaQpkQgjGVER17gNx8u1qMyaXFZtM0y0XLGH1bzsjMPlkMPLRcYOrZ00rOPfTEuYFOdrpGOqZXVmGrMZRg==", - "dependencies": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.12.1", - "utf8": "3.0.0" - }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/web3-utils/node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, "dependencies": { - "isexe": "^2.0.0" + "is-docker": "^2.0.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=8" } }, - "node_modules/which-module": { + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/wide-align/node_modules/ansi-regex": { + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, "dependencies": { - "string-width": "^2.1.1" + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/widest-line/node_modules/ansi-regex": { + "node_modules/istanbul-lib-report": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/widest-line/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/widest-line/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/widest-line/node_modules/strip-ansi": { + "node_modules/istanbul-lib-source-maps": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, "dependencies": { - "ansi-regex": "^3.0.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/wif": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", - "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", - "dependencies": { - "bs58check": "<3.0.0" + "node_modules/istanbul-lib-source-maps/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==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/winston": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "node_modules/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, "dependencies": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", - "is-stream": "^2.0.0", - "logform": "^2.2.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">= 6.4.0" + "node": ">=8" } }, - "node_modules/winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "dependencies": { - "readable-stream": "^2.3.7", - "triple-beam": "^1.2.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">= 6.4.0" + "node": ">=4" } }, - "node_modules/winston-transport/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/winston-transport/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } }, - "node_modules/winston-transport/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" } }, - "node_modules/winston/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "engines": { - "node": ">=8" + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/wordwrap": { + "node_modules/lcov-parse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "node_modules/workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", - "dev": true + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true, + "bin": { + "lcov-parse": "bin/cli.js" + } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "node_modules/lerna": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-4.0.0.tgz", + "integrity": "sha512-DD/i1znurfOmNJb0OBw66NmNqiM8kF6uIrzrJ0wGE3VNdzeOhz9ziWLYiRaZDGGwgbcjOo6eIfcx9O5Qynz+kg==", + "dev": true, + "dependencies": { + "@lerna/add": "4.0.0", + "@lerna/bootstrap": "4.0.0", + "@lerna/changed": "4.0.0", + "@lerna/clean": "4.0.0", + "@lerna/cli": "4.0.0", + "@lerna/create": "4.0.0", + "@lerna/diff": "4.0.0", + "@lerna/exec": "4.0.0", + "@lerna/import": "4.0.0", + "@lerna/info": "4.0.0", + "@lerna/init": "4.0.0", + "@lerna/link": "4.0.0", + "@lerna/list": "4.0.0", + "@lerna/publish": "4.0.0", + "@lerna/run": "4.0.0", + "@lerna/version": "4.0.0", + "import-local": "^3.0.2", + "npmlog": "^4.1.2" + }, + "bin": { + "lerna": "cli.js" }, "engines": { - "node": ">=10" + "node": ">= 10.18.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "mkdirp": "^0.5.1" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "node_modules/libnpmaccess": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", + "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", "dev": true, "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/write-json-file": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", - "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", + "node_modules/libnpmaccess/node_modules/make-fetch-happen": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.0.3.tgz", + "integrity": "sha512-uZ/9Cf2vKqsSWZyXhZ9wHHyckBrkntgbnqV68Bfe8zZenlf7D6yuGMXvHZQ+jSnzPkjosuNP1HGasj1J4h8OlQ==", "dev": true, "dependencies": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" }, "engines": { - "node": ">=8.3" + "node": ">= 10" } }, - "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "node_modules/libnpmaccess/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, "engines": { - "node": ">=8.3.0" + "node": ">=10" } }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "node_modules/libnpmpublish": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", + "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "dev": true, "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" + "normalize-package-data": "^3.0.2", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0", + "semver": "^7.1.3", + "ssri": "^8.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "node_modules/libnpmpublish/node_modules/make-fetch-happen": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.0.3.tgz", + "integrity": "sha512-uZ/9Cf2vKqsSWZyXhZ9wHHyckBrkntgbnqV68Bfe8zZenlf7D6yuGMXvHZQ+jSnzPkjosuNP1HGasj1J4h8OlQ==", + "dev": true, "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" } }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "node_modules/libnpmpublish/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, "engines": { - "node": ">=0.4" + "node": ">=10" } }, - "node_modules/y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, - "node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "node_modules/load-json-file/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", + "dev": true + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true, + "engines": { + "node": ">=0.8.6" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dev": true + }, + "node_modules/make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/map-obj": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", + "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", + "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", + "dev": true, + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dev": true, + "dependencies": { + "mime-db": "1.48.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", + "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-infer-owner/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.2.tgz", + "integrity": "sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.2", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.23", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha-lcov-reporter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mocha-lcov-reporter/-/mocha-lcov-reporter-1.3.0.tgz", + "integrity": "sha1-Rpve9PivyaEWBW8HnfYYLQr7A4Q=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/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==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mock-stdin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mock-stdin/-/mock-stdin-1.0.0.tgz", + "integrity": "sha512-tukRdb9Beu27t6dN+XztSRHq9J0B/CoAOySGzHfn8UTfmqipA5yNT/sDUEyYdAV3Hpka6Wx6kOMxuObdOex60Q==", + "dev": true + }, + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/my-easy-fp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/my-easy-fp/-/my-easy-fp-0.5.1.tgz", + "integrity": "sha512-musRCJYBnEDDzod5ugUykOqHoZYudhtC90J536tFrMqXfjpBzb0PRzLkadM2chgNFsCebzm9GtC+qjQ7xKgpGg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "tslib": "1.11.1" + } + }, + "node_modules/my-easy-fp/node_modules/tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/natural-orderby": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", + "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/nock": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.1.1.tgz", + "integrity": "sha512-YKTR9MjfK3kS9/l4nuTxyYm30cgOExRHzkLNhL8nhEUyU4f8Za/dRxOqjhVT1vGs0svWo3dDnJTUX1qxYeWy5w==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash.set": "^4.3.2", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-gyp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", + "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-gyp/node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/node-gyp/node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/node-gyp/node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/node-gyp/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-gyp/node_modules/tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/node-gyp/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", + "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "resolve": "^1.20.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-lifecycle": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", + "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", + "dev": true, + "dependencies": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "node_modules/npm-lifecycle/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "node_modules/npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "dev": true, + "dependencies": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-treeify": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", + "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onigasm": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz", + "integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==", + "dev": true, + "dependencies": { + "lru-cache": "^5.1.1" + } + }, + "node_modules/onigasm/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/onigasm/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "dev": true, + "dependencies": { + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pacote": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "dev": true, + "dependencies": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/make-fetch-happen": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.0.3.tgz", + "integrity": "sha512-uZ/9Cf2vKqsSWZyXhZ9wHHyckBrkntgbnqV68Bfe8zZenlf7D6yuGMXvHZQ+jSnzPkjosuNP1HGasj1J4h8OlQ==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pacote/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-path": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.3.tgz", + "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0", + "qs": "^6.9.4", + "query-string": "^6.13.8" + } + }, + "node_modules/parse-path/node_modules/qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/parse-url": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.0.tgz", + "integrity": "sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw==", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "normalize-url": "^6.1.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + } + }, + "node_modules/password-prompt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", + "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.1.0", + "cross-spawn": "^6.0.5" + } + }, + "node_modules/password-prompt/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/password-prompt/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/password-prompt/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/password-prompt/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/password-prompt/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/password-prompt/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/password-prompt/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prettier-plugin-organize-imports": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-2.2.0.tgz", + "integrity": "sha512-2WM3moc/cAPCCsSneYhaL4+mMws0Bypbxz+98wuRyaA7GMokhOECVkQCG7l2hcH+9/4d5NsgZs9yktfwDy4r7A==", + "dev": true, + "peerDependencies": { + "prettier": ">=2.0", + "typescript": ">=2.9" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", + "dev": true, + "dependencies": { + "read": "1" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "node_modules/protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qqjs": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/qqjs/-/qqjs-0.3.11.tgz", + "integrity": "sha512-pB2X5AduTl78J+xRSxQiEmga1jQV0j43jOPs/MTgTLApGFEOn6NgdE2dEjp7nvDtjkIOZbvFIojAiYUx6ep3zg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "debug": "^4.1.1", + "execa": "^0.10.0", + "fs-extra": "^6.0.1", + "get-stream": "^5.1.0", + "glob": "^7.1.2", + "globby": "^10.0.1", + "http-call": "^5.1.2", + "load-json-file": "^6.2.0", + "pkg-dir": "^4.2.0", + "tar-fs": "^2.0.0", + "tmp": "^0.1.0", + "write-json-file": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/qqjs/node_modules/fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/qqjs/node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qqjs/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dev": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "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/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "dev": true + }, + "node_modules/read-package-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", + "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", + "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", + "dev": true, + "dependencies": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "node_modules/read-package-tree/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-package-tree/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-package-tree/node_modules/read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "node_modules/read-package-tree/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "dev": true, + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shiki": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.5.tgz", + "integrity": "sha512-XFn+rl3wIowDjzdr5DlHoHgQphXefgUTs2bNp/bZu4WF9gTrTLnKwio3f28VjiFG6Jpip7yQn/p4mMj6OrjrtQ==", + "dev": true, + "dependencies": { + "json5": "^2.2.0", + "onigasm": "^2.2.5", + "vscode-textmate": "5.2.0" + } + }, + "node_modules/shx": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", + "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.3", + "shelljs": "^0.8.4" + }, + "bin": { + "shx": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", + "dev": true + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stdout-stderr": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/stdout-stderr/-/stdout-stderr-0.1.13.tgz", + "integrity": "sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/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==", + "dev": true, + "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/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", + "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tar": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/temp-write": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-4.0.0.tgz", + "integrity": "sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "dev": true, + "dependencies": { + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tmp/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-node": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.0.0.tgz", + "integrity": "sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg==", + "dev": true, + "dependencies": { + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.1", + "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-cwd": "dist/bin-cwd.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": ">=12.0.0" + }, + "peerDependencies": { + "@swc/core": ">=1.2.45", + "@swc/wasm": ">=1.2.45", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typedoc": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.2.tgz", + "integrity": "sha512-SR1ByJB3USg+jxoxwzMRP07g/0f/cQUE5t7gOh1iTUyjTPyJohu9YSKRlK+MSXXqlhIq+m0jkEHEG5HoY7/Adg==", + "dev": true, + "dependencies": { + "glob": "^7.1.7", + "handlebars": "^4.7.7", + "lodash": "^4.17.21", + "lunr": "^2.3.9", + "marked": "^2.1.1", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shiki": "^0.9.3", + "typedoc-default-themes": "^0.12.10" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.20.0" + }, + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x" + } + }, + "node_modules/typedoc-default-themes": { + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", + "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/umask": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", + "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write-json-file": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", + "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", + "dev": true, + "dependencies": { + "detect-indent": "^6.0.0", + "graceful-fs": "^4.1.15", + "is-plain-obj": "^2.0.0", + "make-dir": "^3.0.0", + "sort-keys": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-pkg/node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-pkg/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/write-pkg/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/write-pkg/node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-pkg/node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/bootstrap-cli": { + "name": "symbol-bootstrap", + "version": "1.1.0", + "extraneous": true, + "license": "Apache-2.0", + "dependencies": { + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@oclif/plugin-autocomplete": "^0.3.0", + "@oclif/plugin-help": "^3.2.2", + "figlet": "^1.5.0", + "inquirer": "^8.1.1", + "lodash": "^4.17.21", + "symbol-bootstrap-core": "1.1.0", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "winston": "^3.3.3" + }, + "bin": { + "symbol-bootstrap": "bin/run" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "packages/bootstrap-core": { + "name": "symbol-bootstrap-core", + "version": "1.1.0", + "extraneous": true, + "license": "Apache-2.0", + "dependencies": { + "handlebars": "^4.7.7", + "js-yaml": "^3.14.0", + "lodash": "^4.17.21", + "noble-ed25519": "^1.2.5", + "semver": "^7.3.5", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "utf8": "^3.0.0", + "winston": "^3.3.3" + }, + "bin": { + "symbol-bootstrap-core": "lib/index.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "packages/network-cli": { + "name": "symbol-network", + "version": "1.1.0", + "extraneous": true, + "license": "Apache-2.0", + "dependencies": { + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@oclif/plugin-autocomplete": "^0.3.0", + "@oclif/plugin-help": "^3.2.2", + "figlet": "^1.5.0", + "inquirer": "^8.1.1", + "lodash": "^4.17.21", + "symbol-bootstrap-core": "1.1.0", + "symbol-network-core": "1.1.0", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "winston": "^3.3.3" + }, + "bin": { + "symbol-network": "bin/run" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "packages/network-core": { + "name": "symbol-network-core", + "version": "1.1.0", + "extraneous": true, + "license": "Apache-2.0", + "dependencies": { + "lodash": "^4.17.21", + "symbol-bootstrap-core": "1.1.0", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "utf8": "^3.0.0" + }, + "bin": { + "symbol-network-core": "lib/index.js" + }, + "engines": { + "node": ">=12.0.0" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", + "dev": true + }, + "@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "dev": true, + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "dev": true + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + } + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "@eslint/eslintrc": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@lerna/add": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-4.0.0.tgz", + "integrity": "sha512-cpmAH1iS3k8JBxNvnMqrGTTjbY/ZAiKa1ChJzFevMYY3eeqbvhsBKnBcxjRXtdrJ6bd3dCQM+ZtK+0i682Fhng==", + "dev": true, + "requires": { + "@lerna/bootstrap": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "npm-package-arg": "^8.1.0", + "p-map": "^4.0.0", + "pacote": "^11.2.6", + "semver": "^7.3.4" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/bootstrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-4.0.0.tgz", + "integrity": "sha512-RkS7UbeM2vu+kJnHzxNRCLvoOP9yGNgkzRdy4UV2hNalD7EP41bLvRVOwRYQ7fhc2QcbhnKNdOBihYRL0LcKtw==", + "dev": true, + "requires": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/has-npm-version": "4.0.0", + "@lerna/npm-install": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/rimraf-dir": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/symlink-binary": "4.0.0", + "@lerna/symlink-dependencies": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "read-package-tree": "^5.3.1", + "semver": "^7.3.4" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/changed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-4.0.0.tgz", + "integrity": "sha512-cD+KuPRp6qiPOD+BO6S6SN5cARspIaWSOqGBpGnYzLb4uWT8Vk4JzKyYtc8ym1DIwyoFXHosXt8+GDAgR8QrgQ==", + "dev": true, + "requires": { + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/listable": "4.0.0", + "@lerna/output": "4.0.0" + } + }, + "@lerna/check-working-tree": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-4.0.0.tgz", + "integrity": "sha512-/++bxM43jYJCshBiKP5cRlCTwSJdRSxVmcDAXM+1oUewlZJVSVlnks5eO0uLxokVFvLhHlC5kHMc7gbVFPHv6Q==", + "dev": true, + "requires": { + "@lerna/collect-uncommitted": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "@lerna/validation-error": "4.0.0" + } + }, + "@lerna/child-process": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-4.0.0.tgz", + "integrity": "sha512-XtCnmCT9eyVsUUHx6y/CTBYdV9g2Cr/VxyseTWBgfIur92/YKClfEtJTbOh94jRT62hlKLqSvux/UhxXVh613Q==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@lerna/clean": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-4.0.0.tgz", + "integrity": "sha512-uugG2iN9k45ITx2jtd8nEOoAtca8hNlDCUM0N3lFgU/b1mEQYAPRkqr1qs4FLRl/Y50ZJ41wUz1eazS+d/0osA==", + "dev": true, + "requires": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/rimraf-dir": "4.0.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/cli": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-4.0.0.tgz", + "integrity": "sha512-Neaw3GzFrwZiRZv2g7g6NwFjs3er1vhraIniEs0jjVLPMNC4eata0na3GfE5yibkM/9d3gZdmihhZdZ3EBdvYA==", + "dev": true, + "requires": { + "@lerna/global-options": "4.0.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2", + "yargs": "^16.2.0" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "@lerna/collect-uncommitted": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-4.0.0.tgz", + "integrity": "sha512-ufSTfHZzbx69YNj7KXQ3o66V4RC76ffOjwLX0q/ab//61bObJ41n03SiQEhSlmpP+gmFbTJ3/7pTe04AHX9m/g==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "chalk": "^4.1.0", + "npmlog": "^4.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@lerna/collect-updates": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-4.0.0.tgz", + "integrity": "sha512-bnNGpaj4zuxsEkyaCZLka9s7nMs58uZoxrRIPJ+nrmrZYp1V5rrd+7/NYTuunOhY2ug1sTBvTAxj3NZQ+JKnOw==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "slash": "^3.0.0" + } + }, + "@lerna/command": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-4.0.0.tgz", + "integrity": "sha512-LM9g3rt5FsPNFqIHUeRwWXLNHJ5NKzOwmVKZ8anSp4e1SPrv2HNc1V02/9QyDDZK/w+5POXH5lxZUI1CHaOK/A==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/project": "4.0.0", + "@lerna/validation-error": "4.0.0", + "@lerna/write-log-file": "4.0.0", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^4.1.2" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + } + } + }, + "@lerna/conventional-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-4.0.0.tgz", + "integrity": "sha512-CSUQRjJHFrH8eBn7+wegZLV3OrNc0Y1FehYfYGhjLE2SIfpCL4bmfu/ViYuHh9YjwHaA+4SX6d3hR+xkeseKmw==", + "dev": true, + "requires": { + "@lerna/validation-error": "4.0.0", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.2", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "lodash.template": "^4.5.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "pify": "^5.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@lerna/create": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-4.0.0.tgz", + "integrity": "sha512-mVOB1niKByEUfxlbKTM1UNECWAjwUdiioIbRQZEeEabtjCL69r9rscIsjlGyhGWCfsdAG5wfq4t47nlDXdLLag==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "init-package-json": "^2.0.2", + "npm-package-arg": "^8.1.0", + "p-reduce": "^2.1.0", + "pacote": "^11.2.6", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0", + "whatwg-url": "^8.4.0", + "yargs-parser": "20.2.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@lerna/create-symlink": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-4.0.0.tgz", + "integrity": "sha512-I0phtKJJdafUiDwm7BBlEUOtogmu8+taxq6PtIrxZbllV9hWg59qkpuIsiFp+no7nfRVuaasNYHwNUhDAVQBig==", + "dev": true, + "requires": { + "cmd-shim": "^4.1.0", + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@lerna/describe-ref": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-4.0.0.tgz", + "integrity": "sha512-eTU5+xC4C5Gcgz+Ey4Qiw9nV2B4JJbMulsYJMW8QjGcGh8zudib7Sduj6urgZXUYNyhYpRs+teci9M2J8u+UvQ==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-4.0.0.tgz", + "integrity": "sha512-jYPKprQVg41+MUMxx6cwtqsNm0Yxx9GDEwdiPLwcUTFx+/qKCEwifKNJ1oGIPBxyEHX2PFCOjkK39lHoj2qiag==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/validation-error": "4.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/exec": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-4.0.0.tgz", + "integrity": "sha512-VGXtL/b/JfY84NB98VWZpIExfhLOzy0ozm/0XaS4a2SmkAJc5CeUfrhvHxxkxiTBLkU+iVQUyYEoAT0ulQ8PCw==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/profiler": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "p-map": "^4.0.0" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/filter-options": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-4.0.0.tgz", + "integrity": "sha512-vV2ANOeZhOqM0rzXnYcFFCJ/kBWy/3OA58irXih9AMTAlQLymWAK0akWybl++sUJ4HB9Hx12TOqaXbYS2NM5uw==", + "dev": true, + "requires": { + "@lerna/collect-updates": "4.0.0", + "@lerna/filter-packages": "4.0.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/filter-packages": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-4.0.0.tgz", + "integrity": "sha512-+4AJIkK7iIiOaqCiVTYJxh/I9qikk4XjNQLhE3kixaqgMuHl1NQ99qXRR0OZqAWB9mh8Z1HA9bM5K1HZLBTOqA==", + "dev": true, + "requires": { + "@lerna/validation-error": "4.0.0", + "multimatch": "^5.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/get-npm-exec-opts": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-4.0.0.tgz", + "integrity": "sha512-yvmkerU31CTWS2c7DvmAWmZVeclPBqI7gPVr5VATUKNWJ/zmVcU4PqbYoLu92I9Qc4gY1TuUplMNdNuZTSL7IQ==", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/get-packed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-4.0.0.tgz", + "integrity": "sha512-rfWONRsEIGyPJTxFzC8ECb3ZbsDXJbfqWYyeeQQDrJRPnEJErlltRLPLgC2QWbxFgFPsoDLeQmFHJnf0iDfd8w==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@lerna/github-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-4.0.0.tgz", + "integrity": "sha512-2jhsldZtTKXYUBnOm23Lb0Fx8G4qfSXF9y7UpyUgWUj+YZYd+cFxSuorwQIgk5P4XXrtVhsUesIsli+BYSThiw==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^18.1.0", + "git-url-parse": "^11.4.4", + "npmlog": "^4.1.2" + } + }, + "@lerna/gitlab-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-4.0.0.tgz", + "integrity": "sha512-OMUpGSkeDWFf7BxGHlkbb35T7YHqVFCwBPSIR6wRsszY8PAzCYahtH3IaJzEJyUg6vmZsNl0FSr3pdA2skhxqA==", + "dev": true, + "requires": { + "node-fetch": "^2.6.1", + "npmlog": "^4.1.2", + "whatwg-url": "^8.4.0" + } + }, + "@lerna/global-options": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-4.0.0.tgz", + "integrity": "sha512-TRMR8afAHxuYBHK7F++Ogop2a82xQjoGna1dvPOY6ltj/pEx59pdgcJfYcynYqMkFIk8bhLJJN9/ndIfX29FTQ==", + "dev": true + }, + "@lerna/has-npm-version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-4.0.0.tgz", + "integrity": "sha512-LQ3U6XFH8ZmLCsvsgq1zNDqka0Xzjq5ibVN+igAI5ccRWNaUsE/OcmsyMr50xAtNQMYMzmpw5GVLAivT2/YzCg==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "semver": "^7.3.4" + } + }, + "@lerna/import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-4.0.0.tgz", + "integrity": "sha512-FaIhd+4aiBousKNqC7TX1Uhe97eNKf5/SC7c5WZANVWtC7aBWdmswwDt3usrzCNpj6/Wwr9EtEbYROzxKH8ffg==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@lerna/info": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-4.0.0.tgz", + "integrity": "sha512-8Uboa12kaCSZEn4XRfPz5KU9XXoexSPS4oeYGj76s2UQb1O1GdnEyfjyNWoUl1KlJ2i/8nxUskpXIftoFYH0/Q==", + "dev": true, + "requires": { + "@lerna/command": "4.0.0", + "@lerna/output": "4.0.0", + "envinfo": "^7.7.4" + } + }, + "@lerna/init": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-4.0.0.tgz", + "integrity": "sha512-wY6kygop0BCXupzWj5eLvTUqdR7vIAm0OgyV9WHpMYQGfs1V22jhztt8mtjCloD/O0nEe4tJhdG62XU5aYmPNQ==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@lerna/link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-4.0.0.tgz", + "integrity": "sha512-KlvPi7XTAcVOByfaLlOeYOfkkDcd+bejpHMCd1KcArcFTwijOwXOVi24DYomIeHvy6HsX/IUquJ4PPUJIeB4+w==", + "dev": true, + "requires": { + "@lerna/command": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/symlink-dependencies": "4.0.0", + "p-map": "^4.0.0", + "slash": "^3.0.0" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/list": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-4.0.0.tgz", + "integrity": "sha512-L2B5m3P+U4Bif5PultR4TI+KtW+SArwq1i75QZ78mRYxPc0U/piau1DbLOmwrdqr99wzM49t0Dlvl6twd7GHFg==", + "dev": true, + "requires": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/listable": "4.0.0", + "@lerna/output": "4.0.0" + } + }, + "@lerna/listable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-4.0.0.tgz", + "integrity": "sha512-/rPOSDKsOHs5/PBLINZOkRIX1joOXUXEtyUs5DHLM8q6/RP668x/1lFhw6Dx7/U+L0+tbkpGtZ1Yt0LewCLgeQ==", + "dev": true, + "requires": { + "@lerna/query-graph": "4.0.0", + "chalk": "^4.1.0", + "columnify": "^1.5.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "@lerna/log-packed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-4.0.0.tgz", + "integrity": "sha512-+dpCiWbdzgMAtpajLToy9PO713IHoE6GV/aizXycAyA07QlqnkpaBNZ8DW84gHdM1j79TWockGJo9PybVhrrZQ==", "dev": true, - "engines": { - "node": ">=10" + "requires": { + "byte-size": "^7.0.0", + "columnify": "^1.5.4", + "has-unicode": "^2.0.1", + "npmlog": "^4.1.2" } }, - "node_modules/yargs-unparser/node_modules/decamelize": { + "@lerna/npm-conf": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-4.0.0.tgz", + "integrity": "sha512-uS7H02yQNq3oejgjxAxqq/jhwGEE0W0ntr8vM3EfpCW1F/wZruwQw+7bleJQ9vUBjmdXST//tk8mXzr5+JXCfw==", "dev": true, - "engines": { - "node": ">=10" + "requires": { + "config-chain": "^1.1.12", + "pify": "^5.0.0" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "@lerna/npm-dist-tag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-4.0.0.tgz", + "integrity": "sha512-F20sg28FMYTgXqEQihgoqSfwmq+Id3zT23CnOwD+XQMPSy9IzyLf1fFVH319vXIw6NF6Pgs4JZN2Qty6/CQXGw==", "dev": true, - "engines": { - "node": ">=6" + "requires": { + "@lerna/otplease": "4.0.0", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^4.1.2" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "@lerna/npm-install": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-4.0.0.tgz", + "integrity": "sha512-aKNxq2j3bCH3eXl3Fmu4D54s/YLL9WSwV8W7X2O25r98wzrO38AUN6AB9EtmAx+LV/SP15et7Yueg9vSaanRWg==", "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/get-npm-exec-opts": "4.0.0", + "fs-extra": "^9.1.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" }, - "engines": { - "node": ">= 10" + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + }, + "@lerna/npm-publish": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-4.0.0.tgz", + "integrity": "sha512-vQb7yAPRo5G5r77DRjHITc9piR9gvEKWrmfCH7wkfBnGWEqu7n8/4bFQ7lhnkujvc8RXOsYpvbMQkNfkYibD/w==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", - "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", - "dev": true - }, - "@babel/core": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz", - "integrity": "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "@lerna/otplease": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "fs-extra": "^9.1.0", + "libnpmpublish": "^4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "pify": "^5.0.0", + "read-package-json": "^3.0.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { - "@babel/highlight": "^7.12.13" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true } } }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "@lerna/npm-run-script": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-4.0.0.tgz", + "integrity": "sha512-Jmyh9/IwXJjOXqKfIgtxi0bxi1pUeKe5bD3S81tkcy+kyng/GNj9WSqD5ZggoNP2NP//s4CLDAtUYLdP7CU9rA==", "dev": true, "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@lerna/child-process": "4.0.0", + "@lerna/get-npm-exec-opts": "4.0.0", + "npmlog": "^4.1.2" } }, - "@babel/helper-compilation-targets": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", - "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", + "@lerna/otplease": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-4.0.0.tgz", + "integrity": "sha512-Sgzbqdk1GH4psNiT6hk+BhjOfIr/5KhGBk86CEfHNJTk9BK4aZYyJD4lpDbDdMjIV4g03G7pYoqHzH765T4fxw==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.12", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "@lerna/prompt": "4.0.0" } }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "@lerna/output": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-4.0.0.tgz", + "integrity": "sha512-Un1sHtO1AD7buDQrpnaYTi2EG6sLF+KOPEAMxeUYG5qG3khTs2Zgzq5WE3dt2N/bKh7naESt20JjIW6tBELP0w==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" + "npmlog": "^4.1.2" } }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "@lerna/pack-directory": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-4.0.0.tgz", + "integrity": "sha512-NJrmZNmBHS+5aM+T8N6FVbaKFScVqKlQFJNY2k7nsJ/uklNKsLLl6VhTQBPwMTbf6Tf7l6bcKzpy7aePuq9UiQ==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@lerna/get-packed": "4.0.0", + "@lerna/package": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "npm-packlist": "^2.1.4", + "npmlog": "^4.1.2", + "tar": "^6.1.0", + "temp-write": "^4.0.0" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "@lerna/package": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-4.0.0.tgz", + "integrity": "sha512-l0M/izok6FlyyitxiQKr+gZLVFnvxRQdNhzmQ6nRnN9dvBJWn+IxxpM+cLqGACatTnyo9LDzNTOj2Db3+s0s8Q==", + "dev": true, + "requires": { + "load-json-file": "^6.2.0", + "npm-package-arg": "^8.1.0", + "write-pkg": "^4.0.0" + } + }, + "@lerna/package-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-4.0.0.tgz", + "integrity": "sha512-QED2ZCTkfXMKFoTGoccwUzjHtZMSf3UKX14A4/kYyBms9xfFsesCZ6SLI5YeySEgcul8iuIWfQFZqRw+Qrjraw==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/validation-error": "4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "semver": "^7.3.4" } }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "@lerna/prerelease-id-from-version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-4.0.0.tgz", + "integrity": "sha512-GQqguzETdsYRxOSmdFZ6zDBXDErIETWOqomLERRY54f4p+tk4aJjoVdd9xKwehC9TBfIFvlRbL1V9uQGHh1opg==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "semver": "^7.3.4" } }, - "@babel/helper-module-transforms": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", - "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "@lerna/profiler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-4.0.0.tgz", + "integrity": "sha512-/BaEbqnVh1LgW/+qz8wCuI+obzi5/vRE8nlhjPzdEzdmWmZXuCKyWSEzAyHOJWw1ntwMiww5dZHhFQABuoFz9Q==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14" + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2", + "upath": "^2.0.1" }, "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true } } }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "@lerna/project": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-4.0.0.tgz", + "integrity": "sha512-o0MlVbDkD5qRPkFKlBZsXZjoNTWPyuL58564nSfZJ6JYNmgAptnWPB2dQlAc7HWRZkmnC2fCkEdoU+jioPavbg==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@lerna/package": "4.0.0", + "@lerna/validation-error": "4.0.0", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "load-json-file": "^6.2.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, - "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "@lerna/prompt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-4.0.0.tgz", + "integrity": "sha512-4Ig46oCH1TH5M7YyTt53fT6TuaKMgqUUaqdgxvp6HP6jtdak6+amcsqB8YGz2eQnw/sdxunx84DfI9XpoLj4bQ==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "inquirer": "^7.3.3", + "npmlog": "^4.1.2" } }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "@lerna/publish": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-4.0.0.tgz", + "integrity": "sha512-K8jpqjHrChH22qtkytA5GRKIVFEtqBF6JWj1I8dWZtHs4Jywn8yB1jQ3BAMLhqmDJjWJtRck0KXhQQKzDK2UPg==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "4.0.0", + "@lerna/child-process": "4.0.0", + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "@lerna/log-packed": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/npm-dist-tag": "4.0.0", + "@lerna/npm-publish": "4.0.0", + "@lerna/otplease": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/pack-directory": "4.0.0", + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "@lerna/version": "4.0.0", + "fs-extra": "^9.1.0", + "libnpmaccess": "^4.0.1", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^11.2.6", + "semver": "^7.3.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@lerna/pulse-till-done": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-4.0.0.tgz", + "integrity": "sha512-Frb4F7QGckaybRhbF7aosLsJ5e9WuH7h0KUkjlzSByVycxY91UZgaEIVjS2oN9wQLrheLMHl6SiFY0/Pvo0Cxg==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "npmlog": "^4.1.2" } }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "@lerna/query-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-4.0.0.tgz", + "integrity": "sha512-YlP6yI3tM4WbBmL9GCmNDoeQyzcyg1e4W96y/PKMZa5GbyUvkS2+Jc2kwPD+5KcXou3wQZxSPzR3Te5OenaDdg==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@lerna/package-graph": "4.0.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true + "@lerna/resolve-symlink": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-4.0.0.tgz", + "integrity": "sha512-RtX8VEUzqT+uLSCohx8zgmjc6zjyRlh6i/helxtZTMmc4+6O4FS9q5LJas2uGO2wKvBlhcD6siibGt7dIC3xZA==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2", + "read-cmd-shim": "^2.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true + "@lerna/rimraf-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-4.0.0.tgz", + "integrity": "sha512-QNH9ABWk9mcMJh2/muD9iYWBk1oQd40y6oH+f3wwmVGKYU5YJD//+zMiBI13jxZRtwBx0vmBZzkBkK1dR11cBg==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "npmlog": "^4.1.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" + } }, - "@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "@lerna/run": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-4.0.0.tgz", + "integrity": "sha512-9giulCOzlMPzcZS/6Eov6pxE9gNTyaXk0Man+iCIdGJNMrCnW7Dme0Z229WWP/UoxDKg71F2tMsVVGDiRd8fFQ==", "dev": true, "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/npm-run-script": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/profiler": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/timer": "4.0.0", + "@lerna/validation-error": "4.0.0", + "p-map": "^4.0.0" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } } }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "@lerna/run-lifecycle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-4.0.0.tgz", + "integrity": "sha512-IwxxsajjCQQEJAeAaxF8QdEixfI7eLKNm4GHhXHrgBu185JcwScFZrj9Bs+PFKxwb+gNLR4iI5rpUdY8Y0UdGQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@lerna/npm-conf": "4.0.0", + "npm-lifecycle": "^3.1.5", + "npmlog": "^4.1.2" } }, - "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", - "dev": true + "@lerna/run-topologically": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-4.0.0.tgz", + "integrity": "sha512-EVZw9hGwo+5yp+VL94+NXRYisqgAlj0jWKWtAIynDCpghRxCE5GMO3xrQLmQgqkpUl9ZxQFpICgYv5DW4DksQA==", + "dev": true, + "requires": { + "@lerna/query-graph": "4.0.0", + "p-queue": "^6.6.2" + } }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "@lerna/symlink-binary": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-4.0.0.tgz", + "integrity": "sha512-zualodWC4q1QQc1pkz969hcFeWXOsVYZC5AWVtAPTDfLl+TwM7eG/O6oP+Rr3fFowspxo6b1TQ6sYfDV6HXNWA==", "dev": true, "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@lerna/create-symlink": "4.0.0", + "@lerna/package": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { - "@babel/highlight": "^7.12.13" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "aggregate-error": "^3.0.0" } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true } } }, - "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "@lerna/symlink-dependencies": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-4.0.0.tgz", + "integrity": "sha512-BABo0MjeUHNAe2FNGty1eantWp8u83BHSeIMPDxNq0MuW2K3CiQRaeWT3EGPAzXpGt0+hVzBrA6+OT0GPn7Yuw==", "dev": true, "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@lerna/create-symlink": "4.0.0", + "@lerna/resolve-symlink": "4.0.0", + "@lerna/symlink-binary": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { - "@babel/highlight": "^7.12.13" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "aggregate-error": "^3.0.0" } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true } } }, - "@babel/types": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", - "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", + "@lerna/timer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-4.0.0.tgz", + "integrity": "sha512-WFsnlaE7SdOvjuyd05oKt8Leg3ENHICnvX3uYKKdByA+S3g+TCz38JsNs7OUZVt+ba63nC2nbXDlUnuT2Xbsfg==", + "dev": true + }, + "@lerna/validation-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-4.0.0.tgz", + "integrity": "sha512-1rBOM5/koiVWlRi3V6dB863E1YzJS8v41UtsHgMr6gB2ncJ2LsQtMKlJpi3voqcgh41H8UsPXR58RrrpPpufyw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" + "npmlog": "^4.1.2" + } + }, + "@lerna/version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-4.0.0.tgz", + "integrity": "sha512-otUgiqs5W9zGWJZSCCMRV/2Zm2A9q9JwSDS7s/tlKq4mWCYriWo7+wsHEA/nPTMDyYyBO5oyZDj+3X50KDUzeA==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "4.0.0", + "@lerna/child-process": "4.0.0", + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/conventional-commits": "4.0.0", + "@lerna/github-client": "4.0.0", + "@lerna/gitlab-client": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "temp-write": "^4.0.0", + "write-json-file": "^4.3.0" }, "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, - "@dabh/diagnostics": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", - "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", - "requires": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "@lerna/write-log-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-4.0.0.tgz", + "integrity": "sha512-XRG5BloiArpXRakcnPHmEHJp+4AtnhRtpDIHSghmXD5EichI1uD73J7FgPp30mm2pDRq3FdqB0NbwSEsJ9xFQg==", "dev": true, "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } + "npmlog": "^4.1.2", + "write-file-atomic": "^3.0.3" } }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@js-joda/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz", - "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==" - }, "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, - "@oclif/command": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.7.0.tgz", - "integrity": "sha512-TkknFtWcZI8te0E8sW+ohiblExrLx73rIcV4KdIzDX01u+oTZWZaap51F6TSGFnR/Gey0WctaDvJhZlt4xgKdA==", + "@npmcli/ci-detect": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", + "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==", + "dev": true + }, + "@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, "requires": { - "@oclif/config": "^1.15.1", - "@oclif/errors": "^1.3.3", - "@oclif/parser": "^3.8.3", - "@oclif/plugin-help": "^3", - "debug": "^4.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" } }, - "@oclif/config": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.16.0.tgz", - "integrity": "sha512-vOnMPQcHokC03WBCuLipTxksTwgZcmDOnH2H0UHqndfKKN9GVDzpZTH6zaFVQBdjTME5VtRzg9A2UaNmq6OXWw==", + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, "requires": { - "@oclif/errors": "^1.3.3", - "@oclif/parser": "^3.8.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-wsl": "^2.1.1", - "tslib": "^1.9.3" - }, - "dependencies": { - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - } + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" } }, - "@oclif/dev-cli": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/@oclif/dev-cli/-/dev-cli-1.22.2.tgz", - "integrity": "sha512-c7633R37RxrQIpwqPKxjNRm6/jb1yuG8fd16hmNz9Nw+/MUhEtQtKHSCe9ScH8n5M06l6LEo4ldk9LEGtpaWwA==", + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "dev": true, "requires": { - "@oclif/command": "^1.5.13", - "@oclif/config": "^1.12.12", - "@oclif/errors": "^1.2.2", - "@oclif/plugin-help": "^2.1.6", - "cli-ux": "^5.2.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "github-slugger": "^1.2.1", - "lodash": "^4.17.11", - "normalize-package-data": "^2.5.0", - "qqjs": "^0.3.10", - "tslib": "^1.9.3" - }, - "dependencies": { - "@oclif/plugin-help": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-2.2.3.tgz", - "integrity": "sha512-bGHUdo5e7DjPJ0vTeRBMIrfqTRDBfyR5w0MP41u0n3r7YG5p14lvMmiCXxi6WDaP2Hw5nqx3PnkAIntCKZZN7g==", - "dev": true, - "requires": { - "@oclif/command": "^1.5.13", - "chalk": "^2.4.1", - "indent-string": "^4.0.0", - "lodash.template": "^4.4.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0", - "widest-line": "^2.0.1", - "wrap-ansi": "^4.0.0" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/node-gyp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", + "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", + "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "infer-owner": "^1.0.4", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + }, + "dependencies": { + "node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" } }, - "wrap-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "abbrev": "1" } } } }, + "@oclif/command": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.0.tgz", + "integrity": "sha512-5vwpq6kbvwkQwKqAoOU3L72GZ3Ta8RRrewKj9OJRolx28KLJJ8Dg9Rf7obRwt5jQA9bkYd8gqzMTrI7H3xLfaw==", + "dev": true, + "requires": { + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.3", + "@oclif/plugin-help": "^3", + "debug": "^4.1.1", + "semver": "^7.3.2" + } + }, + "@oclif/config": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.17.0.tgz", + "integrity": "sha512-Lmfuf6ubjQ4ifC/9bz1fSCHc6F6E653oyaRXxg+lgT4+bYf9bk+nqrUpAbrXyABkCqgIBiFr3J4zR/kiFdE1PA==", + "dev": true, + "requires": { + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-wsl": "^2.1.1", + "tslib": "^2.0.0" + } + }, + "@oclif/dev-cli": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@oclif/dev-cli/-/dev-cli-1.26.0.tgz", + "integrity": "sha512-272udZP+bG4qahoAcpWcMTJKiA+V42kRMqQM7n4tgW35brYb2UP5kK+p08PpF8sgSfRTV8MoJVJG9ax5kY82PA==", + "dev": true, + "requires": { + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@oclif/errors": "^1.3.3", + "@oclif/plugin-help": "^3.2.0", + "cli-ux": "^5.2.1", + "debug": "^4.1.1", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^1.2.1", + "lodash": "^4.17.11", + "normalize-package-data": "^3.0.0", + "qqjs": "^0.3.10", + "tslib": "^2.0.3" + } + }, "@oclif/errors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.3.tgz", - "integrity": "sha512-EJR6AIOEkt/NnARNIVAskPDVtdhtO5TTNXmhDrGqMoWVsr0R6DkkLrMyq95BmHvlVWM1nduoq4fQPuCyuF2jaA==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz", + "integrity": "sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==", + "dev": true, "requires": { "clean-stack": "^3.0.0", - "fs-extra": "^9.0.1", + "fs-extra": "^8.1", "indent-string": "^4.0.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - } } }, "@oclif/linewrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", - "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==" + "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==", + "dev": true }, "@oclif/parser": { "version": "3.8.5", "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.5.tgz", "integrity": "sha512-yojzeEfmSxjjkAvMRj0KzspXlMjCfBzNRPkWw8ZwOSoNWoJn+OCS/m/S+yfV6BvAM4u2lTzX9Y5rCbrFIgkJLg==", + "dev": true, "requires": { "@oclif/errors": "^1.2.2", "@oclif/linewrap": "^1.0.0", "chalk": "^2.4.2", "tslib": "^1.9.3" - } - }, - "@oclif/plugin-autocomplete": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.3.0.tgz", - "integrity": "sha512-gCuIUCswvoU1BxDDvHSUGxW8rFagiacle8jHqE49+WnuniXD/N8NmJvnzmlNyc8qLE192CnKK+qYyAF+vaFQBg==", - "requires": { - "@oclif/command": "^1.5.13", - "@oclif/config": "^1.13.0", - "chalk": "^4.1.0", - "cli-ux": "^5.2.1", - "debug": "^4.0.0", - "fs-extra": "^9.0.1", - "moment": "^2.22.1" }, "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, "@oclif/plugin-help": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.1.0.tgz", - "integrity": "sha512-orSWpXGlJaX16eSjAtI8scA8QhrjQOaCSHodEx52t18JKbIVzG8jcngugyWAOB/V4jhPl0rdiVk9XFsaIIiG2g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.2.tgz", + "integrity": "sha512-SPZ8U8PBYK0n4srFjCLedk0jWU4QlxgEYLCXIBShJgOwPhTTQknkUlsEwaMIevvCU4iCQZhfMX+D8Pz5GZjFgA==", + "dev": true, "requires": { "@oclif/command": "^1.5.20", "@oclif/config": "^1.15.1", - "chalk": "^2.4.1", + "@oclif/errors": "^1.2.2", + "chalk": "^4.1.0", "indent-string": "^4.0.0", "lodash.template": "^4.4.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0", - "widest-line": "^2.0.1", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "widest-line": "^3.1.0", "wrap-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, "requires": { - "color-convert": "^1.9.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + } } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "has-flag": "^4.0.0" } }, "wrap-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^2.1.1", "strip-ansi": "^4.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -8252,6 +15423,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -8263,7 +15435,8 @@ "@oclif/screen": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", - "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==" + "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==", + "dev": true }, "@oclif/test": { "version": "1.2.8", @@ -8274,70 +15447,219 @@ "fancy-test": "^1.4.3" } }, - "@types/archiver": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.0.tgz", - "integrity": "sha512-baFOhanb/hxmcOd1Uey2TfFg43kTSmM6py1Eo7Rjbv/ivcl7PXLhY0QgXGf50Hx/eskGCFqPfhs/7IZLb15C5g==", + "@octokit/auth-token": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", + "integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==", "dev": true, "requires": { - "@types/glob": "*" + "@octokit/types": "^6.0.3" } }, - "@types/bip32": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/bip32/-/bip32-1.0.2.tgz", - "integrity": "sha512-gqkz3Jq2OA3s5QOHe7de9tUzW7Xjoct6ImCbt0KQnF0ParqDSvLo5Fu+mKQykFF1fgIcdzEmm0CO6HN+xG2SAA==", + "@octokit/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", + "dev": true, + "requires": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/graphql": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.4.tgz", + "integrity": "sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg==", + "dev": true, + "requires": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-8.2.1.tgz", + "integrity": "sha512-BJz6kWuL3n+y+qM8Pv+UGbSxH6wxKf/SBs5yzGufMHwDefsa+Iq7ZGy1BINMD2z9SkXlIzk1qiu988rMuGXEMg==", + "dev": true + }, + "@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.14.0.tgz", + "integrity": "sha512-S2uEu2uHeI7Vf+Lvj8tv3O5/5TCAa8GHS0dUQN7gdM7vKA6ZHAbR6HkAVm5yMb1mbedLEbxOuQ+Fa0SQ7tCDLA==", + "dev": true, + "requires": { + "@octokit/types": "^6.18.0" + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true, + "requires": {} + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.4.1.tgz", + "integrity": "sha512-Nx0g7I5ayAYghsLJP4Q1Ch2W9jYYM0FlWWWZocUro8rNxVwuZXGfFd7Rcqi9XDWepSXjg1WByiNJnZza2hIOvQ==", + "dev": true, + "requires": { + "@octokit/types": "^6.18.1", + "deprecation": "^2.3.1" + } + }, + "@octokit/request": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.0.tgz", + "integrity": "sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==", + "dev": true, + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.1", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/rest": { + "version": "18.6.7", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.6.7.tgz", + "integrity": "sha512-Kn6WrI2ZvmAztdx+HEaf88RuJn+LK72S8g6OpciE4kbZddAN84fu4fiPGxcEu052WmqKVnA/cnQsbNlrYC6rqQ==", + "dev": true, + "requires": { + "@octokit/core": "^3.5.0", + "@octokit/plugin-paginate-rest": "^2.6.2", + "@octokit/plugin-request-log": "^1.0.2", + "@octokit/plugin-rest-endpoint-methods": "5.4.1" + } + }, + "@octokit/types": { + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.18.1.tgz", + "integrity": "sha512-5YsddjO1U+xC8ZYKV8yZYebW55PCc7qiEEeZ+wZRr6qyclynzfyD65KZ5FdtIeP0/cANyFaD7hV69qElf1nMsQ==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^8.2.1" + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", + "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", + "dev": true + }, + "@types/archiver": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.1.tgz", + "integrity": "sha512-heuaCk0YH5m274NOLSi66H1zX6GtZoMsdE6TYFcpFFjBjg0FoU4i4/M/a/kNlgNg26Xk3g364mNOYe1JaiEPOQ==", "dev": true, "requires": { - "@types/node": "*" + "@types/glob": "*" } }, "@types/chai": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.12.tgz", - "integrity": "sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ==", - "dev": true - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", + "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", "dev": true }, "@types/figlet": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.2.0.tgz", - "integrity": "sha512-TDZkNpYfkc3X8yv7w1QBziZmmxzNfGKX+YjeNkMpmSiNV0QOdNf9G5cEZB3FH1/oaqpSQEdxuDzURdju2L3lng==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.5.2.tgz", + "integrity": "sha512-1+taqbVokkR79F0KYwgUMqNoWlpiXPxYPCim7Idtw9kZ+tj8JtLwFyumF5UOBFB3dQHUzxLQrA/WA8qPppPm6w==", "dev": true }, "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", "dev": true, "requires": { "@types/minimatch": "*", "@types/node": "*" } }, - "@types/handlebars": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.1.0.tgz", - "integrity": "sha512-gq9YweFKNNB1uFK71eRqsd4niVkXrxHugqWFQkeLRJvGjnxsLr16bYtcsG4tOFwmYi0Bax+wCkbf1reUfdl4kA==", - "dev": true, - "requires": { - "handlebars": "*" - } - }, "@types/inquirer": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-7.3.1.tgz", - "integrity": "sha512-osD38QVIfcdgsPCT0V3lD7eH0OFurX71Jft18bZrsVQWVRt6TuxRzlr0GJLrxoHZR2V5ph7/qP8se/dcnI7o0g==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==", "dev": true, "requires": { "@types/through": "*", @@ -8345,87 +15667,95 @@ } }, "@types/js-yaml": { - "version": "3.12.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.5.tgz", - "integrity": "sha512-JCcp6J0GV66Y4ZMDAQCXot4xprYB+Zfd3meK9+INSJeVZwJmHAW30BBEEkPzXswMXuiyReUGOP3GxrADc9wPww==", + "version": "3.12.7", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz", + "integrity": "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ==", "dev": true }, "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==", "dev": true }, "@types/lodash": { - "version": "4.14.165", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.165.tgz", - "integrity": "sha512-tjSSOTHhI5mCHTy/OOXYIhi2Wt1qcbHmuXD1Ha7q70CgI/I71afO4XtLb/cVexki1oVYchpul/TOuu3Arcdxrg==", + "version": "4.14.171", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz", + "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", "dev": true }, - "@types/memorystream": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@types/memorystream/-/memorystream-0.3.0.tgz", - "integrity": "sha512-gzh6mqZcLryYHn4g2MuMWjo9J1+Py/XYwITyZmUxV7ZoBIi7bTbBgSiuC5tcm3UL3gmaiYssQFDlXr/3fK94cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "@types/mocha": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz", - "integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", "dev": true }, "@types/node": { - "version": "10.17.28", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.28.tgz", - "integrity": "sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ==", + "version": "15.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.1.tgz", + "integrity": "sha512-wF6hazbsnwaW3GhK4jFuw5NaLDQVRQ6pWQUGAUrJzxixFkTaODSiAKMPXuHwPEPkAKQWHAzj6uJ5h+3zU9gQxg==", "dev": true }, - "@types/node-forge": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-0.9.4.tgz", - "integrity": "sha512-uFhaKXdhhrLNzfNhXbXJqDwF3jXMzN9qfkdW+IAMnAfwqNZhBcE/cciMITLT0Sg6ls6JYHo3xVWNXAG1g9tm8A==", + "@types/node-fetch": { + "version": "2.5.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.11.tgz", + "integrity": "sha512-2upCKaqVZETDRb8A2VTaRymqFBEgH8u6yr96b/u3+1uQEPDRo3mJLEiPk7vdXBHRtjwkjqzFYMJXrt0Z9QsYjQ==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "*", + "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, - "@types/semver": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.6.tgz", - "integrity": "sha512-0caWDWmpCp0uifxFh+FaqK3CuZ2SkRR/ZRxAV5+zNdC3QVUi6wyOJnefhPvtNt8NQWXB5OA93BUvZsXpWat2Xw==", + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "@types/sinon": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", - "integrity": "sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg==", - "dev": true, - "requires": { - "@types/sinonjs__fake-timers": "*" - } + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, - "@types/sinonjs__fake-timers": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz", - "integrity": "sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg==", + "@types/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-4g1jrL98mdOIwSOUh6LTlB0Cs9I0dQPwINUhBg7C6pN4HLr8GS8xsksJxilW6S6dQHVi2K/o+lQuQcg7LroCnw==", "dev": true }, - "@types/sshpk": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/@types/sshpk/-/sshpk-1.10.5.tgz", - "integrity": "sha512-5EKeKE0YmM2F5xjhk5k6mgL9tx5XpHPqKVaN5c1zCBGSFv4VPRqp1fhGKjo1lkyb7kmvchjgWB8TPAT14+JiRg==", + "@types/sinon": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.2.tgz", + "integrity": "sha512-BHn8Bpkapj8Wdfxvh2jWIUoaYB/9/XhsL0oOvBfRagJtKlSl9NWPcFOz2lRukI9szwGxFtYZCTejJSqsGDbdmw==", "dev": true, "requires": { - "@types/node": "*" + "@sinonjs/fake-timers": "^7.1.0" } }, "@types/through": { @@ -8437,84 +15767,86 @@ "@types/node": "*" } }, - "@types/winston": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.4.4.tgz", - "integrity": "sha512-BVGCztsypW8EYwJ+Hq+QNYiT/MUyCif0ouBH+flrY66O5W+KIXAMML6E/0fJpm7VjIzgangahl5S03bJJQGrZw==", - "dev": true, - "requires": { - "winston": "*" - } - }, "@typescript-eslint/eslint-plugin": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.8.0.tgz", - "integrity": "sha512-lFb4VCDleFSR+eo4Ew+HvrJ37ZH1Y9ZyE+qyP7EiwBpcCVxwmUc5PAqhShCQ8N8U5vqYydm74nss+a0wrrCErw==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.2.tgz", + "integrity": "sha512-PGqpLLzHSxq956rzNGasO3GsAPf2lY9lDUBXhS++SKonglUmJypaUtcKzRtUte8CV7nruwnDxtLUKpVxs0wQBw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "3.8.0", - "debug": "^4.1.1", + "@typescript-eslint/experimental-utils": "4.28.2", + "@typescript-eslint/scope-manager": "4.28.2", + "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/experimental-utils": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.8.0.tgz", - "integrity": "sha512-o8T1blo1lAJE0QDsW7nSyvZHbiDzQDjINJKyB44Z3sSL39qBy5L10ScI/XwDtaiunoyKGLiY9bzRk4YjsUZl8w==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz", + "integrity": "sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ==", "dev": true, "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.8.0", - "@typescript-eslint/typescript-estree": "3.8.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.28.2", + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/typescript-estree": "4.28.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.8.0.tgz", - "integrity": "sha512-u5vjOBaCsnMVQOvkKCXAmmOhyyMmFFf5dbkM3TIbg3MZ2pyv5peE4gj81UAbTHwTOXEwf7eCQTUMKrDl/+qGnA==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.2.tgz", + "integrity": "sha512-Q0gSCN51eikAgFGY+gnd5p9bhhCUAl0ERMiDKrTzpSoMYRubdB8MJrTTR/BBii8z+iFwz8oihxd0RAdP4l8w8w==", "dev": true, "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.8.0", - "@typescript-eslint/types": "3.8.0", - "@typescript-eslint/typescript-estree": "3.8.0", - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/scope-manager": "4.28.2", + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/typescript-estree": "4.28.2", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz", + "integrity": "sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/visitor-keys": "4.28.2" } }, "@typescript-eslint/types": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.8.0.tgz", - "integrity": "sha512-8kROmEQkv6ss9kdQ44vCN1dTrgu4Qxrd2kXr10kz2NP5T8/7JnEfYNxCpPkArbLIhhkGLZV3aVMplH1RXQRF7Q==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.2.tgz", + "integrity": "sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.8.0.tgz", - "integrity": "sha512-MTv9nPDhlKfclwnplRNDL44mP2SY96YmPGxmMbMy6x12I+pERcxpIUht7DXZaj4mOKKtet53wYYXU0ABaiXrLw==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz", + "integrity": "sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg==", "dev": true, "requires": { - "@typescript-eslint/types": "3.8.0", - "@typescript-eslint/visitor-keys": "3.8.0", - "debug": "^4.1.1", - "glob": "^7.1.6", + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/visitor-keys": "4.28.2", + "debug": "^4.3.1", + "globby": "^11.0.3", "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.8.0.tgz", - "integrity": "sha512-gfqQWyVPpT9NpLREXNR820AYwgz+Kr1GuF3nf1wxpHD6hdxI62tq03ToomFnDxY0m3pUB39IF7sil7D5TQexLA==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz", + "integrity": "sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/types": "4.28.2", + "eslint-visitor-keys": "^2.0.0" } }, "@ungap/promise-all-settled": { @@ -8523,18 +15855,51 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "requires": {} + }, + "add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", "dev": true }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -8554,9 +15919,9 @@ } }, "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -8572,36 +15937,39 @@ "dev": true }, "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" } }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" } }, "ansicolors": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", + "dev": true }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -8617,41 +15985,33 @@ "default-require-extensions": "^3.0.0" } }, - "archiver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - } + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" }, "dependencies": { "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8662,27 +16022,17 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -8693,19 +16043,46 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -8713,7 +16090,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, "assertion-error": { "version": "1.1.0", @@ -8722,16 +16100,11 @@ "dev": true }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -8741,7 +16114,8 @@ "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true }, "aws-sign2": { "version": "0.7.0", @@ -8750,48 +16124,37 @@ "dev": true }, "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "requires": { - "safe-buffer": "^5.0.1" - } + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, "requires": { "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - } } }, - "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + "before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true }, "binary-extensions": { "version": "2.2.0", @@ -8799,66 +16162,22 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "bip32": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-1.0.4.tgz", - "integrity": "sha512-8T21eLWylZETolyqCPgia+MNp+kY37zFr7PTFDTPObHeNi9JlfG4qGIh8WzerIJidtwoK+NsWq2I5i66YfHoIw==", - "requires": { - "bs58check": "^2.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "tiny-secp256k1": "^1.0.0", - "typeforce": "^1.11.5", - "wif": "^2.0.6" - } - }, - "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==" - } - } - }, - "bip44-constants": { - "version": "8.0.103", - "resolved": "https://registry.npmjs.org/bip44-constants/-/bip44-constants-8.0.103.tgz", - "integrity": "sha512-wuGsY9IKUS9GC5Sf/Acb5jLJZI3Z8qsMoQHWldnQyoVUlij4y8e5srh28Iqul1HwK+elPsAYGNYKtYhovjvNxA==" - }, "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "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==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8868,15 +16187,11 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -8896,37 +16211,21 @@ "node-releases": "^1.1.71" } }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true }, "buffer-from": { "version": "1.1.1", @@ -8934,15 +16233,65 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "buffer-reverse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", - "integrity": "sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=" + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", + "dev": true + }, + "byte-size": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", + "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", + "dev": true }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + "cacache": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", + "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "dev": true, + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } }, "caching-transform": { "version": "4.0.0", @@ -8956,6 +16305,16 @@ "write-file-atomic": "^3.0.0" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -8968,16 +16327,28 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, "caniuse-lite": { - "version": "1.0.30001235", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz", - "integrity": "sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==", + "version": "1.0.30001243", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz", + "integrity": "sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA==", "dev": true }, "cardinal": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "dev": true, "requires": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" @@ -8989,22 +16360,17 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "catbuffer-typescript": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/catbuffer-typescript/-/catbuffer-typescript-0.1.1.tgz", - "integrity": "sha512-r/z3UKG3YCCdsTEHRXGe3IQxA8OaBRBE31e9du2LOaLStGxYCmxUjfRtJ/DyKfgpS55fJPl3w/VFMnsfwIHmkA==" - }, "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", - "pathval": "^1.1.0", + "pathval": "^1.1.1", "type-detect": "^4.0.5" } }, @@ -9012,44 +16378,18 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } } }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, "check-error": { "version": "1.0.2", @@ -9058,19 +16398,19 @@ "dev": true }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "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.5.0" + "readdirp": "~3.6.0" } }, "chownr": { @@ -9079,44 +16419,53 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, - "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" - } + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, "clean-stack": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.0.tgz", - "integrity": "sha512-RHxtgFvXsRQ+1AM7dlozLDY7ssmvUUh0XEnfnyhYgJTO6beNZHBogiaCwGM9Q3rFrUkYxOtsZRC0zAturg5bjg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "dev": true, "requires": { "escape-string-regexp": "4.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } } }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, "requires": { "restore-cursor": "^3.1.0" } }, "cli-progress": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.8.2.tgz", - "integrity": "sha512-qRwBxLldMSfxB+YGFgNRaj5vyyHe1yMpVeDL79c+7puGujdKJHQHydgqXDcrkvQgJ5U/d3lpf6vffSoVVUftVQ==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", + "integrity": "sha512-g7rLWfhAo/7pF+a/STFH/xPyosaL1zgADhI0OM83hl3c7S43iGvJWEAV2QuDOnQ8i6EMBj/u4+NTd0d5L+4JfA==", + "dev": true, "requires": { "colors": "^1.1.2", "string-width": "^4.2.0" } }, "cli-ux": { - "version": "5.4.9", - "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.4.9.tgz", - "integrity": "sha512-4yCKJbFQqNQxf1v0E5T5aBJLt3SbW6dXc/R7zHp4ycdPMg9fAy5f2vhPsWgXEGCMQg+fgN0Sp7EYcZ1XGkFyUA==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.6.3.tgz", + "integrity": "sha512-/oDU4v8BiDjX2OKcSunGH0iGDiEtj2rZaGyqNuv9IT4CgcSMyVWAMfn0+rEHaOc4n9ka78B0wo1+N1QX89f7mw==", + "dev": true, "requires": { "@oclif/command": "^1.6.0", "@oclif/errors": "^1.2.1", @@ -9125,11 +16474,11 @@ "ansi-escapes": "^4.3.0", "ansi-styles": "^4.2.0", "cardinal": "^2.1.1", - "chalk": "^3.0.0", + "chalk": "^4.1.0", "clean-stack": "^3.0.0", "cli-progress": "^3.4.0", "extract-stack": "^2.0.0", - "fs-extra": "^9.0.1", + "fs-extra": "^8.1", "hyperlinker": "^1.0.0", "indent-string": "^4.0.0", "is-wsl": "^2.2.0", @@ -9138,76 +16487,81 @@ "natural-orderby": "^2.0.1", "object-treeify": "^1.1.4", "password-prompt": "^1.1.2", - "semver": "^5.6.0", + "semver": "^7.3.2", "string-width": "^4.2.0", - "strip-ansi": "^5.1.0", - "supports-color": "^7.1.0", - "supports-hyperlinks": "^1.0.1", + "strip-ansi": "^6.0.0", + "supports-color": "^8.1.0", + "supports-hyperlinks": "^2.1.0", "tslib": "^2.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } - }, - "tslib": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz", - "integrity": "sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g==" } } }, "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true }, "cliui": { "version": "6.0.0", @@ -9220,6 +16574,30 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -9233,52 +16611,64 @@ } } }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "requires": { - "color-name": "1.1.3" + "isobject": "^3.0.1" } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" } } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "dev": true, "requires": { - "color-name": "~1.1.4" + "mkdirp-infer-owner": "^2.0.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "color-name": "1.1.3" } }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", @@ -9288,15 +16678,34 @@ "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "combined-stream": { @@ -9320,21 +16729,60 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "compress-commons": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", - "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + } } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true }, "content-type": { "version": "1.0.4", @@ -9342,84 +16790,171 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "conventional-changelog-angular": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", + "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-core": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.3.tgz", + "integrity": "sha512-MwnZjIoMRL3jtPH5GywVNqetGILC7g6RQFvdb8LRU/fA/338JbeWAku3PZ8yQ+mtVRViiISqJlb0sOz0htBZig==", + "dev": true, + "requires": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + } + }, + "conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", + "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", + "dev": true, + "requires": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" }, "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } }, - "coveralls": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz", - "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==", + "conventional-commits-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", + "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", "dev": true, "requires": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0", + "trim-off-newlines": "^1.0.0" } }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" } }, - "crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, "requires": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" + "safe-buffer": "~5.1.1" } }, - "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==", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + } } }, - "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==", + "coveralls": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", + "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", + "dev": true, "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" + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.5", + "request": "^2.88.2" } }, + "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==", + "dev": true + }, "create-ts-index": { "version": "1.13.6", "resolved": "https://registry.npmjs.org/create-ts-index/-/create-ts-index-1.13.6.tgz", @@ -9439,72 +16974,104 @@ "my-easy-fp": "^0.5.1", "tslib": "^1.10.0", "yargs": "^15.3.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "crypto-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", - "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, "dayjs": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.4.tgz", - "integrity": "sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==", + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.6.tgz", + "integrity": "sha512-AztC/IOW4L1Q41A86phW5Thhcrco3xuAA+YX/BLpLWWjRcTj5TOt/QImBLmCKlrF7u7k47arTnOyL6GnbG8Hvw==", "dev": true }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true }, "deep-eql": { "version": "3.0.1", @@ -9536,28 +17103,85 @@ "strip-bom": "^4.0.0" } }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, "detect-indent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", - "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, + "dir-compare": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", + "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", + "dev": true, + "requires": { + "buffer-equal": "^1.0.0", + "minimatch": "^3.0.4" + } + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "requires": { "path-type": "^4.0.0" } @@ -9571,58 +17195,101 @@ "esutils": "^2.0.2" } }, - "dom-walk": { + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "electron-to-chromium": { - "version": "1.3.749", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz", - "integrity": "sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A==", + "version": "1.3.770", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.770.tgz", + "integrity": "sha512-Kyh8DGK1KfEZuYKIHvuOmrKotsKZQ+qBkDIWHciE3QoFkxXB1KzPP+tfLilSHAfxTON0yYMnFCWkQtUOR7g6KQ==", "dev": true }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "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" - } - }, "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", + "dev": true }, - "enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "requires": { "once": "^1.4.0" } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -9632,17 +17299,47 @@ "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -9650,197 +17347,238 @@ "dev": true }, "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", + "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.2", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", + "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "color-convert": "^2.0.1" } }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "regexpp": { + "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, "eslint-config-prettier": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", - "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } + "requires": {} + }, + "eslint-plugin-header": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", + "integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==", + "dev": true, + "requires": {} }, "eslint-plugin-prettier": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", - "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", + "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" } }, "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" }, "dependencies": { "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "estraverse": { @@ -9855,39 +17593,11 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "ethereum-bloom-filters": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz", - "integrity": "sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true }, "execa": { "version": "0.10.0", @@ -9904,19 +17614,69 @@ "strip-eof": "^1.0.0" }, "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -9927,6 +17687,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -9937,6 +17698,7 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -9946,7 +17708,8 @@ "extract-stack": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz", - "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==" + "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==", + "dev": true }, "extsprintf": { "version": "1.3.0", @@ -9983,16 +17746,16 @@ "dev": true }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fast-json-stable-stringify": { @@ -10007,61 +17770,48 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" - }, "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "dev": true, "requires": { "reusify": "^1.0.4" } }, - "fecha": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz", - "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==" - }, - "figlet": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", - "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==" - }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, "requires": { "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } } }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", + "dev": true + }, "find-cache-dir": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", @@ -10074,15 +17824,24 @@ } }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "requires": { + "micromatch": "^4.0.2" + } + }, "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -10090,215 +17849,495 @@ "dev": true }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", + "dev": true + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" }, "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "glob": "^7.1.3" + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" } } } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, - "fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, - "foreground-child": { + "get-func-name": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-pkg-repo": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.1.2.tgz", + "integrity": "sha512-/FjamZL9cBYllEbReZkxF2IMh80d8TJoC4e3bmLNif8ibHw95aj0N/tzqK0kZz9eU/3w3dL6lF4fnnX/sDdW3A==", + "dev": true, + "requires": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "meow": "^7.0.0", + "through2": "^2.0.0" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "meow": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", + "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + } + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "safe-buffer": "~5.1.0" } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "shebang-regex": "^3.0.0" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { - "isexe": "^2.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "pump": "^3.0.0" } }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "requires": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" }, "dependencies": { - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, - "optional": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "futoin-hkdf": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.3.3.tgz", - "integrity": "sha512-oR75fYk3B3X9/B02Y6vusrBKucrpC6VjxhRL+C6B7FwUpuSRHbhBNG3AZbcE/xPyJmEQWsyqUFp3VeNNbA3S7A==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true + "requires": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true + "git-up": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.5.tgz", + "integrity": "sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^6.0.0" + } }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "git-url-parse": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.5.0.tgz", + "integrity": "sha512-TZYSMDeM37r71Lqg1mbnMlOqlHd7BSij9qN7XwTkRqSAYFMihGLGhfHwgqQob3GUhEneKnV4nskN9rbQw2KGxA==", "dev": true, "requires": { - "pump": "^3.0.0" + "git-up": "^4.0.0" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, "requires": { - "assert-plus": "^1.0.0" + "ini": "^1.3.2" } }, "github-slugger": { @@ -10308,20 +18347,13 @@ "dev": true, "requires": { "emoji-regex": ">=6.0.0 <=6.1.1" - }, - "dependencies": { - "emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", - "dev": true - } } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10335,45 +18367,55 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { - "@types/glob": "^7.1.1", "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true }, "growl": { "version": "1.10.5", @@ -10385,6 +18427,7 @@ "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -10396,7 +18439,8 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -10416,29 +18460,44 @@ "har-schema": "^2.0.0" } }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, - "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" - } + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true }, - "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" - } + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true }, "hasha": { "version": "5.2.2", @@ -10450,12 +18509,6 @@ "type-fest": "^0.8.0" }, "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -10470,28 +18523,27 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "lru-cache": "^6.0.0" } }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, "http-call": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz", @@ -10504,14 +18556,17 @@ "is-stream": "^2.0.0", "parse-json": "^4.0.0", "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - } + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" } }, "http-signature": { @@ -10525,39 +18580,87 @@ "sshpk": "^1.7.0" } }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, "hyperlinker": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", - "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==" + "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", + "dev": true }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -10567,12 +18670,20 @@ "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -10581,12 +18692,36 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "init-package-json": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.3.tgz", + "integrity": "sha512-tk/gAgbMMxR6fn1MgMaM1HpU1ryAmBWWitnxG5OhuNXeX0cbpbgV5jA4AIpQJVNoyOfOevTtO6WX+rPs+EFqaQ==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^8.1.2", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^3.0.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + } }, "inquirer": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, "requires": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", @@ -10603,24 +18738,51 @@ "through": "^2.3.6" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -10630,7 +18792,14 @@ "interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true }, "is-arrayish": { "version": "0.2.1", @@ -10638,6 +18807,12 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -10647,43 +18822,101 @@ "binary-extensions": "^2.0.0" } }, - "is-docker": { + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-ci": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==" + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "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==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true }, "is-plain-obj": { "version": "2.1.0", @@ -10691,24 +18924,79 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, "is-retry-allowed": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "dev": true }, + "is-ssh": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.3.tgz", + "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", + "dev": true, + "requires": { + "protocols": "^1.1.0" + } + }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", "dev": true }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -10719,6 +19007,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, "requires": { "is-docker": "^2.0.0" } @@ -10726,12 +19015,20 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isstream": { "version": "0.1.2", @@ -10787,58 +19084,6 @@ "p-map": "^3.0.0", "rimraf": "^3.0.0", "uuid": "^3.3.3" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } } }, "istanbul-lib-report": { @@ -10898,21 +19143,6 @@ "istanbul-lib-report": "^3.0.0" } }, - "js-sha256": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", - "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-sha512": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", - "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -10920,9 +19150,10 @@ "dev": true }, "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -10931,7 +19162,8 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true }, "jsesc": { "version": "2.5.2", @@ -10945,6 +19177,12 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -10970,21 +19208,37 @@ "dev": true }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" } }, "jsprim": { @@ -10999,62 +19253,157 @@ "verror": "1.10.0" } }, - "kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true }, - "lazystream": { + "lcov-parse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true + }, + "lerna": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-4.0.0.tgz", + "integrity": "sha512-DD/i1znurfOmNJb0OBw66NmNqiM8kF6uIrzrJ0wGE3VNdzeOhz9ziWLYiRaZDGGwgbcjOo6eIfcx9O5Qynz+kg==", + "dev": true, + "requires": { + "@lerna/add": "4.0.0", + "@lerna/bootstrap": "4.0.0", + "@lerna/changed": "4.0.0", + "@lerna/clean": "4.0.0", + "@lerna/cli": "4.0.0", + "@lerna/create": "4.0.0", + "@lerna/diff": "4.0.0", + "@lerna/exec": "4.0.0", + "@lerna/import": "4.0.0", + "@lerna/info": "4.0.0", + "@lerna/init": "4.0.0", + "@lerna/link": "4.0.0", + "@lerna/list": "4.0.0", + "@lerna/publish": "4.0.0", + "@lerna/run": "4.0.0", + "@lerna/version": "4.0.0", + "import-local": "^3.0.2", + "npmlog": "^4.1.2" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "libnpmaccess": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", + "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", + "dev": true, "requires": { - "readable-stream": "^2.0.5" + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0" }, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "make-fetch-happen": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.0.3.tgz", + "integrity": "sha512-uZ/9Cf2vKqsSWZyXhZ9wHHyckBrkntgbnqV68Bfe8zZenlf7D6yuGMXvHZQ+jSnzPkjosuNP1HGasj1J4h8OlQ==", + "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" } } } }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "libnpmpublish": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", + "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "normalize-package-data": "^3.0.2", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0", + "semver": "^7.1.3", + "ssri": "^8.0.1" + }, + "dependencies": { + "make-fetch-happen": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.0.3.tgz", + "integrity": "sha512-uZ/9Cf2vKqsSWZyXhZ9wHHyckBrkntgbnqV68Bfe8zZenlf7D6yuGMXvHZQ+jSnzPkjosuNP1HGasj1J4h8OlQ==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + } } }, "lines-and-columns": { @@ -11076,14 +19425,14 @@ }, "dependencies": { "parse-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", - "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", + "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, @@ -11094,40 +19443,33 @@ "dev": true } } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" } }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true }, - "lodash.difference": { + "lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true }, "lodash.flattendeep": { "version": "4.4.0", @@ -11135,10 +19477,17 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "lodash.set": { "version": "4.3.2", @@ -11150,6 +19499,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, "requires": { "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" @@ -11159,14 +19509,16 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, "requires": { "lodash._reinterpolate": "^3.0.0" } }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true }, "log-driver": { "version": "1.2.7", @@ -11175,24 +19527,49 @@ "dev": true }, "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "chalk": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11210,30 +19587,13 @@ } } }, - "logform": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", - "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" } }, "lunr": { @@ -11265,113 +19625,240 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + } + }, + "map-obj": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", + "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "dev": true + }, "marked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.0.tgz", - "integrity": "sha512-NqRSh2+LlN2NInpqTQnS614Y/3NkVMFFU6sJlRFEpxJ/LHuK/qJECH7/fXZjk4VZstPW/Pevjil/VtSONsLc7Q==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", + "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", "dev": true }, - "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==", + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + } } }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" - }, "merge": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", "dev": true }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "merkletreejs": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.18.tgz", - "integrity": "sha512-f8bSFaUDPZhot94xkjb83XbG1URaiNLxZy6LWTw2IzbQeCA4YX/UxublGxXdLQIYXbWkDghq6EqwG5u4I7ELmA==", - "requires": { - "bignumber.js": "^9.0.1", - "buffer-reverse": "^1.0.1", - "crypto-js": "^3.1.9-1", - "treeify": "^1.1.0", - "web3-utils": "^1.3.4" - }, - "dependencies": { - "crypto-js": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", - "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" - } - } + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" } }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", "dev": true }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "dev": true, "requires": { - "mime-db": "1.44.0" + "mime-db": "1.48.0" } }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, - "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==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, - "minimalistic-crypto-utils": { + "min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -11379,51 +19866,164 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "requires": { - "minimist": "^1.2.5" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } + } + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", + "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" } }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, + "mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + } + } + }, "mocha": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", - "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.2.tgz", + "integrity": "sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.5.1", + "chokidar": "3.5.2", "debug": "4.3.1", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.1.6", + "glob": "7.1.7", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", "minimatch": "3.0.4", "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", + "nanoid": "3.1.23", + "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", "wide-align": "1.1.3", - "workerpool": "6.1.0", + "workerpool": "6.1.5", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" @@ -11463,15 +20063,11 @@ } } }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, "has-flag": { "version": "4.0.0", @@ -11480,69 +20076,33 @@ "dev": true }, "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" } }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, "supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "isexe": "^2.0.0" + "has-flag": "^4.0.0" } }, "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { @@ -11559,12 +20119,6 @@ "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true } } }, @@ -11580,20 +20134,44 @@ "integrity": "sha512-tukRdb9Beu27t6dN+XztSRHq9J0B/CoAOySGzHfn8UTfmqipA5yNT/sDUEyYdAV3Hpka6Wx6kOMxuObdOex60Q==", "dev": true }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + } + } }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, "my-easy-fp": { "version": "0.5.1", @@ -11614,9 +20192,9 @@ } }, "nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", "dev": true }, "natural-compare": { @@ -11628,27 +20206,31 @@ "natural-orderby": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", - "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==" + "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "noble-ed25519": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.0.3.tgz", - "integrity": "sha512-6pOngnpa/GVYURFvE7igoRKm3RrNwQykVLjSCjTvmUdAyOokes75trVDYoi+CGwF8/jh9hWl2zF4ix9OlB9OIQ==" + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "nock": { - "version": "13.0.11", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.0.11.tgz", - "integrity": "sha512-sKZltNkkWblkqqPAsjYW0bm3s9DcHRPiMOyKO/PkfJ+ANHZ2+LA2PLe22r4lLrKgXaiSaDQwW3qGsJFtIpQIeQ==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.1.1.tgz", + "integrity": "sha512-YKTR9MjfK3kS9/l4nuTxyYm30cgOExRHzkLNhL8nhEUyU4f8Za/dRxOqjhVT1vGs0svWo3dDnJTUX1qxYeWy5w==", "dev": true, "requires": { "debug": "^4.1.0", @@ -11660,12 +20242,111 @@ "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + "node-gyp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", + "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + }, + "dependencies": { + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } }, "node-preload": { "version": "0.2.1", @@ -11682,35 +20363,141 @@ "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, - "node-stream-zip": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.5.tgz", - "integrity": "sha512-Lfi9xhSNvnJU35+4ZFlECXKJ70etAgJYWAVCdcEpksPnMrgwNqwkCJqdunoViVoFFV38C7AIodYE+2apuoK9Gw==" + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } }, "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", + "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", + "hosted-git-info": "^4.0.1", + "resolve": "^1.20.0", + "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-lifecycle": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", + "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", + "dev": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "dev": true, + "requires": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } }, "npm-run-path": { "version": "2.0.2", @@ -11719,24 +20506,34 @@ "dev": true, "requires": { "path-key": "^2.0.0" - } - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true } } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, "nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -11772,20 +20569,48 @@ "yargs": "^15.0.2" }, "dependencies": { - "resolve-from": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "glob": "^7.1.3" + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true } } }, @@ -11798,33 +20623,64 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object-treeify": { - "version": "1.1.26", - "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.26.tgz", - "integrity": "sha512-0WTfU7SGM8umY4YPpOg+oHXL66E6dPVCr+sMR6KitPmvg8CkVrHUUZYEFtx0+5Wb0HjFEsBwBYXyGRNeX7c/oQ==" + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", + "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } }, - "one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "requires": { - "fn.name": "1.x.x" - } - }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -11836,26 +20692,60 @@ "dev": true, "requires": { "lru-cache": "^5.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } }, "p-finally": { "version": "1.0.0", @@ -11864,21 +20754,21 @@ "dev": true }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" } }, "p-map": { @@ -11890,12 +20780,58 @@ "aggregate-error": "^3.0.0" } }, + "p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true + }, + "p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, + "p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "dev": true, + "requires": { + "p-reduce": "^2.0.0" + } + }, "package-hash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", @@ -11908,6 +20844,79 @@ "release-zalgo": "^1.0.0" } }, + "pacote": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "dev": true, + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "make-fetch-happen": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.0.3.tgz", + "integrity": "sha512-uZ/9Cf2vKqsSWZyXhZ9wHHyckBrkntgbnqV68Bfe8zZenlf7D6yuGMXvHZQ+jSnzPkjosuNP1HGasj1J4h8OlQ==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + } + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -11917,11 +20926,6 @@ "callsites": "^3.0.0" } }, - "parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -11932,10 +20936,46 @@ "json-parse-better-errors": "^1.0.1" } }, + "parse-path": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.3.tgz", + "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0", + "qs": "^6.9.4", + "query-string": "^6.13.8" + }, + "dependencies": { + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "parse-url": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.0.tgz", + "integrity": "sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^6.1.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + } + }, "password-prompt": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", + "dev": true, "requires": { "ansi-escapes": "^3.1.0", "cross-spawn": "^6.0.5" @@ -11944,7 +20984,57 @@ "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -11957,41 +21047,33 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, - "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" - } - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -11999,9 +21081,16 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true }, "pkg-dir": { "version": "4.2.0", @@ -12010,18 +21099,57 @@ "dev": true, "requires": { "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } } }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prettier": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", "dev": true }, "prettier-linter-helpers": { @@ -12034,25 +21162,17 @@ } }, "prettier-plugin-organize-imports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-1.1.1.tgz", - "integrity": "sha512-rFA1lnek1FYkMGthm4xBKME41qUKItTovuo24bCGZu/Vu1n3gW71UPLAkIdwewwkZCe29gRVweSOPXvAdckFuw==", - "dev": true - }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-2.2.0.tgz", + "integrity": "sha512-2WM3moc/cAPCCsSneYhaL4+mMws0Bypbxz+98wuRyaA7GMokhOECVkQCG7l2hcH+9/4d5NsgZs9yktfwDy4r7A==", + "dev": true, + "requires": {} }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "process-on-spawn": { "version": "1.0.0", @@ -12069,12 +21189,49 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", + "dev": true, + "requires": { + "read": "1" + } + }, "propagate": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", "dev": true }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -12097,101 +21254,351 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "qqjs": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/qqjs/-/qqjs-0.3.11.tgz", - "integrity": "sha512-pB2X5AduTl78J+xRSxQiEmga1jQV0j43jOPs/MTgTLApGFEOn6NgdE2dEjp7nvDtjkIOZbvFIojAiYUx6ep3zg==", + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qqjs": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/qqjs/-/qqjs-0.3.11.tgz", + "integrity": "sha512-pB2X5AduTl78J+xRSxQiEmga1jQV0j43jOPs/MTgTLApGFEOn6NgdE2dEjp7nvDtjkIOZbvFIojAiYUx6ep3zg==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "debug": "^4.1.1", + "execa": "^0.10.0", + "fs-extra": "^6.0.1", + "get-stream": "^5.1.0", + "glob": "^7.1.2", + "globby": "^10.0.1", + "http-call": "^5.1.2", + "load-json-file": "^6.2.0", + "pkg-dir": "^4.2.0", + "tar-fs": "^2.0.0", + "tmp": "^0.1.0", + "write-json-file": "^4.1.1" + }, + "dependencies": { + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "dev": true + }, + "read-package-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", + "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-json-fast": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", + "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", "dev": true, "requires": { - "chalk": "^2.4.1", - "debug": "^4.1.1", - "execa": "^0.10.0", - "fs-extra": "^6.0.1", - "get-stream": "^5.1.0", - "glob": "^7.1.2", - "globby": "^10.0.1", - "http-call": "^5.1.2", - "load-json-file": "^6.2.0", - "pkg-dir": "^4.2.0", - "tar-fs": "^2.0.0", - "tmp": "^0.1.0", - "write-json-file": "^4.1.1" + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" }, "dependencies": { - "fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } } }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } } }, "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==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, - "readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, "requires": { - "minimatch": "^3.0.4" + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" @@ -12201,22 +21608,34 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, "requires": { "resolve": "^1.1.6" } }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, "redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "dev": true, "requires": { "esprima": "~4.0.0" } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "release-zalgo": { @@ -12262,6 +21681,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -12269,13 +21694,32 @@ "dev": true }, "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, "requires": { + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -12286,94 +21730,90 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, - "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" - } - }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true }, "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, "requires": { "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, - "rxjs-compat": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", - "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" - }, "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==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "requires": { "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } } }, "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -12385,32 +21825,35 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "kind-of": "^6.0.2" } }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true }, "shelljs": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dev": true, "requires": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -12418,112 +21861,123 @@ } }, "shiki": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.3.tgz", - "integrity": "sha512-NEjg1mVbAUrzRv2eIcUt3TG7X9svX7l3n3F5/3OdFq+/BxUdmBOeKGiH4icZJBLHy354Shnj6sfBTemea2e7XA==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.5.tgz", + "integrity": "sha512-XFn+rl3wIowDjzdr5DlHoHgQphXefgUTs2bNp/bZu4WF9gTrTLnKwio3f28VjiFG6Jpip7yQn/p4mMj6OrjrtQ==", "dev": true, "requires": { + "json5": "^2.2.0", "onigasm": "^2.2.5", - "vscode-textmate": "^5.2.0" + "vscode-textmate": "5.2.0" } }, "shx": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.2.tgz", - "integrity": "sha512-aS0mWtW3T2sHAenrSrip2XGv39O9dXIFUqxAEWHEOS1ePtGIBavdPJY1kE2IHl14V/4iCbUiNDPGdyYTtmhSoA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", + "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", + "dev": true, "requires": { - "es6-object-assign": "^1.0.3", - "minimist": "^1.2.0", - "shelljs": "^0.8.1" + "minimist": "^1.2.3", + "shelljs": "^0.8.4" } }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "dependencies": { "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true } } }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "dev": true + }, + "socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + } + }, "sort-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.0.0.tgz", - "integrity": "sha512-hlJLzrn/VN49uyNkZ8+9b+0q9DjmmYcYOnbMQtpkLrYpPwRApDPZfmqbUfJnAA3sb/nRib+nDot7Zi/1ER1fuA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", "dev": true, "requires": { "is-plain-obj": "^2.0.0" @@ -12565,26 +22019,6 @@ "rimraf": "^3.0.0", "signal-exit": "^3.0.2", "which": "^2.0.1" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } } }, "spdx-correct": { @@ -12614,20 +22048,46 @@ } }, "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", + "dev": true + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", "dev": true }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -12638,19 +22098,16 @@ "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - } } }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } }, "stdout-stderr": { "version": "0.1.13", @@ -12663,32 +22120,72 @@ } }, "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "dev": true }, "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==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" + }, + "dependencies": { + "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==", + "dev": true + } } }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + } + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "requires": { "ansi-regex": "^5.0.0" } @@ -12705,12 +22202,19 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, "requires": { - "is-hex-prefixed": "1.0.0" + "min-indent": "^1.0.0" } }, "strip-json-comments": { @@ -12719,154 +22223,126 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } }, "supports-hyperlinks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, "requires": { - "has-flag": "^2.0.0", - "supports-color": "^5.0.0" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, "dependencies": { "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, - "symbol-hd-wallets": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/symbol-hd-wallets/-/symbol-hd-wallets-0.14.1.tgz", - "integrity": "sha512-jMYbVHlGtB9IiufME4nGDKEvYXz7e6YfBK0eulGhetMH/0TZ+qIomCmNaMU2EfJEeywo0Kb6TIMIN4AEq9ObBA==", + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, "requires": { - "bip32": "^1.0.4", - "bip39": "^3.0.2", - "bip44-constants": "^8.0.5", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "crypto-js": "^4.0.0", - "js-sha3": "^0.8.0", - "tiny-secp256k1": "^1.1.3", - "tweetnacl": "^1.0.3" - } - }, - "symbol-openapi-typescript-fetch-client": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/symbol-openapi-typescript-fetch-client/-/symbol-openapi-typescript-fetch-client-0.11.2.tgz", - "integrity": "sha512-A1MAN8/UWlaCEibBf6zxkduZwDNSvWwLPp6JB0GeYI/FAOrw/9nLyuS/NJQ3siGAUclnuejH1wG7KdUg0/4RSw==" - }, - "symbol-sdk": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-sdk/-/symbol-sdk-1.0.1.tgz", - "integrity": "sha512-G4sdGBfggTSqKs9XchMQAtOfl80Z2eARafxZnzje5qxzfUSQUCFYdBP7IJiA2PDoeyfXJJpzWWTlgq9EzvKm1A==", - "requires": { - "@js-joda/core": "^3.2.0", - "bluebird": "^3.7.2", - "catbuffer-typescript": "0.1.1", - "crypto-js": "^4.0.0", - "diff": "^4.0.2", - "futoin-hkdf": "^1.3.2", - "js-sha256": "^0.9.0", - "js-sha3": "^0.8.0", - "js-sha512": "^0.8.0", - "long": "^4.0.0", - "merkletreejs": "^0.2.9", - "minimist": "^1.2.5", - "node-fetch": "^2.6.0", - "ripemd160": "^2.0.2", - "rxjs": "^6.6.3", - "rxjs-compat": "^6.6.3", - "symbol-openapi-typescript-fetch-client": "0.11.2", - "tweetnacl": "^1.0.3", - "utf8": "^2.1.2", - "ws": "^7.3.1" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "ajv": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", + "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true } } }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "tar": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { + "chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } } } }, "tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "tar-stream": "^2.1.4" } }, "tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -12875,6 +22351,25 @@ "readable-stream": "^3.1.1" } }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true + }, + "temp-write": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-4.0.0.tgz", + "integrity": "sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^3.3.2" + } + }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -12886,10 +22381,11 @@ "minimatch": "^3.0.4" } }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true }, "text-table": { "version": "0.2.0", @@ -12900,23 +22396,16 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, - "tiny-secp256k1": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz", - "integrity": "sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==", + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, "requires": { - "bindings": "^1.3.0", - "bn.js": "^4.11.8", - "create-hmac": "^1.1.7", - "elliptic": "^6.4.0", - "nan": "^2.13.2" + "readable-stream": "3" } }, "tmp": { @@ -12926,6 +22415,17 @@ "dev": true, "requires": { "rimraf": "^2.6.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "to-fast-properties": { @@ -12938,6 +22438,7 @@ "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==", + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -12952,23 +22453,39 @@ "punycode": "^2.1.1" } }, - "treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, + "trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true }, "ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.0.0.tgz", + "integrity": "sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg==", "dev": true, "requires": { + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.1", "arg": "^4.1.0", + "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "source-map-support": "^0.5.17", @@ -12984,17 +22501,26 @@ } }, "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true }, "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "tunnel-agent": { @@ -13007,17 +22533,18 @@ } }, "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, "type-detect": { @@ -13027,9 +22554,16 @@ "dev": true }, "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", @@ -13041,48 +22575,20 @@ } }, "typedoc": { - "version": "0.20.34", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.20.34.tgz", - "integrity": "sha512-es+N/KyGPcHl9cAuYh1Z5m7HzwcmfNLghkmb2pzGz7HRDS5GS2uA3hu/c2cv4gCxDsw8pPUPCOvww+Hzf48Kug==", + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.2.tgz", + "integrity": "sha512-SR1ByJB3USg+jxoxwzMRP07g/0f/cQUE5t7gOh1iTUyjTPyJohu9YSKRlK+MSXXqlhIq+m0jkEHEG5HoY7/Adg==", "dev": true, "requires": { - "colors": "^1.4.0", - "fs-extra": "^9.1.0", + "glob": "^7.1.7", "handlebars": "^4.7.7", "lodash": "^4.17.21", "lunr": "^2.3.9", - "marked": "^2.0.1", + "marked": "^2.1.1", "minimatch": "^3.0.0", "progress": "^2.0.3", - "shelljs": "^0.8.4", "shiki": "^0.9.3", - "typedoc-default-themes": "^0.12.9" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "marked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.1.tgz", - "integrity": "sha512-5+/fKgMv2hARmMW7DOpykr2iLhl0NgjyELk5yn92iE7z8Se1IS9n3UsFm86hFXIkvMBmVxki8+ckcpjBeyo/hw==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } + "typedoc-default-themes": "^0.12.10" } }, "typedoc-default-themes": { @@ -13091,56 +22597,102 @@ "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", "dev": true }, - "typeforce": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", - "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" - }, "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true }, "uglify-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.1.tgz", - "integrity": "sha512-RjxApKkrPJB6kjJxQS3iZlf///REXWYxYJxO/MpmlQzVkDWVI3PSnCBWezMecmTU/TRkNxrl8bmsfFQCp+LO+Q==", + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", + "dev": true, "optional": true }, - "underscore": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true + }, + "umask": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", + "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true }, "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" } }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "utf8": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", - "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } }, "uuid": { "version": "3.4.0", @@ -13149,9 +22701,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "validate-npm-package-license": { @@ -13164,6 +22716,15 @@ "spdx-expression-parse": "^3.0.0" } }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -13176,41 +22737,59 @@ } }, "vscode-textmate": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.4.0.tgz", - "integrity": "sha512-c0Q4zYZkcLizeYJ3hNyaVUM2AA8KDhNCA3JvXY8CeZSJuBdAy3bAvSbv46RClC4P3dSO9BdwhnKEx2zOo6vP/w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", "dev": true }, - "web3-utils": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.3.6.tgz", - "integrity": "sha512-hHatFaQpkQgjGVER17gNx8u1qMyaXFZtM0y0XLGH1bzsjMPlkMPLRcYOrZ00rOPfTEuYFOdrpGOqZXVmGrMZRg==", + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.12.1", - "utf8": "3.0.0" - }, - "dependencies": { - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - } + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" } }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "requires": { "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -13260,109 +22839,12 @@ } }, "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "requires": { - "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wif": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", - "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", - "requires": { - "bs58check": "<3.0.0" - } - }, - "winston": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", - "requires": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", - "is-stream": "^2.0.0", - "logform": "^2.2.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - } - } - }, - "winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, "requires": { - "readable-stream": "^2.3.7", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + "string-width": "^4.0.0" } }, "word-wrap": { @@ -13374,37 +22856,57 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true }, "workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", "dev": true }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "3.0.3", @@ -13432,59 +22934,115 @@ "write-file-atomic": "^3.0.0" } }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" - }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, "requires": { - "xhr-request": "^1.1.0" + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "dependencies": { + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "requires": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + } + } } }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { @@ -13504,17 +23062,62 @@ "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true }, "yargs-unparser": { "version": "2.0.0", @@ -13553,16 +23156,6 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true - }, - "zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - } } } } diff --git a/package.json b/package.json index 14ef1a0b6..77d494b3a 100644 --- a/package.json +++ b/package.json @@ -1,119 +1,62 @@ { - "name": "symbol-bootstrap", - "description": "Symbol tool that allows you creating, configuring and running Symbol's networks", - "version": "1.0.8", - "author": "Fernando Boucquez ", - "bin": { - "symbol-bootstrap": "bin/run" - }, - "bugs": "https://github.com/nemtech/symbol-bootstrap/issues", - "dependencies": { - "@oclif/command": "^1.7.0", - "@oclif/config": "^1.16.0", - "@oclif/plugin-autocomplete": "^0.3.0", - "@oclif/plugin-help": "^3.1.0", - "figlet": "^1.2.4", - "handlebars": "^4.7.7", - "inquirer": "^7.3.3", - "js-yaml": "^3.14.0", - "archiver": "^5.2.0", - "lodash": "^4.17.21", - "memorystream": "^0.3.1", - "noble-ed25519": "^1.0.3", - "node-forge": "^0.10.0", - "node-stream-zip": "^1.12.0", - "rxjs": "^6.6.3", - "semver": "^7.3.5", - "shx": "^0.3.2", - "sshpk": "^1.16.1", - "symbol-hd-wallets": "^0.14.1-alpha-202103052158", - "symbol-sdk": "^1.0.1", - "tslib": "^1.13.0", - "utf8": "^2.1.2", - "winston": "^3.3.3" + "name": "symbol-bootstrap-parent", + "version": "0.0.0", + "private": true, + "scripts": { + "version": "echo $(node -p -e \"require('./lerna.json').version\")", + "init": "npm install && lerna bootstrap && lerna run init", + "watch": "lerna run watch --parallel --stream", + "clean": "lerna run clean --parallel", + "purge": "lerna run purge --parallel", + "build": "lerna run build --stream", + "publish-alpha": "lerna publish --canary --dist-tag=multimodule --preid alpha-$(date +%Y%m%d%H%M) --skip-git --yes", + "test": "lerna run test --stream", + "e2e": "lerna run e2e --stream", + "publish": "lerna run publish --stream", + "doc": "lerna run doc --stream", + "lint": "lerna run lint --stream", + "style:fix": "lerna run style:fix --stream", + "posttest": "node ./monorepo-merge-reports.js && nyc report", + "coveralls-report": "nyc report --reporter=text-lcov | coveralls", + "create-index-files": "lerna run create-index-files --stream", + "patch-release": "lerna version patch --force-git-tag --yes", + "minor-release": "lerna version minor --force-git-tag --yes", + "new-version": "lerna version prerelease --force-publish --no-git-tag-version --yes", + "push-new-version": "git add . && git commit -m \"Upgrading version\" && git push origin $TRAVIS_BRANCH" }, "devDependencies": { - "@oclif/dev-cli": "^1.22.2", + "@oclif/dev-cli": "^1.26.0", "@oclif/test": "^1.2.8", - "@types/archiver": "^5.1.0", - "@types/bip32": "^1.0.2", - "@types/chai": "^4.2.12", - "@types/figlet": "^1.2.0", - "@types/handlebars": "^4.1.0", - "@types/inquirer": "^7.3.1", + "@types/archiver": "^5.1.1", + "@types/chai": "^4.2.19", + "@types/figlet": "^1.5.1", + "@types/inquirer": "^7.3.2", "@types/js-yaml": "^3.12.5", - "@types/lodash": "^4.14.165", - "@types/memorystream": "^0.3.0", + "@types/lodash": "^4.14.170", "@types/mocha": "^8.2.2", - "@types/node": "^10.17.28", - "@types/node-forge": "^0.9.4", + "@types/node": "^15.12.4", + "@types/node-fetch": "^2.5.10", "@types/semver": "^7.3.6", - "@types/sshpk": "^1.10.5", - "@types/winston": "^2.4.4", - "@typescript-eslint/eslint-plugin": "^3.7.1", - "@typescript-eslint/parser": "^3.7.1", - "chai": "^4.2.0", - "coveralls": "^3.1.0", + "@typescript-eslint/eslint-plugin": "^4.28.0", + "@typescript-eslint/parser": "^4.28.0", + "chai": "^4.3.4", + "coveralls": "^3.1.1", "create-ts-index": "^1.13.6", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.10.1", - "eslint-plugin-prettier": "^3.1.3", - "globby": "^10.0.2", - "marked": ">=2.0.0", - "mocha": "^8.3.2", + "dir-compare": "^3.3.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-header": "^3.1.1", + "eslint-plugin-prettier": "^3.4.0", + "lerna": "^4.0.0", + "mocha": "^9.0.1", "mocha-lcov-reporter": "^1.3.0", "mock-stdin": "^1.0.0", "nyc": "^15.1.0", - "prettier": "^2.0.5", - "prettier-plugin-organize-imports": "^1.1.1", - "ts-node": "^8.10.2", - "typedoc": "^0.20.34", - "typescript": "^3.9.7" - }, - "engines": { - "node": ">=12.0.0" - }, - "files": [ - "/config", - "/presets", - "/bin", - "/lib", - "/npm-shrinkwrap.json", - "/oclif.manifest.json" - ], - "homepage": "https://github.com/nemtech/symbol-bootstrap", - "keywords": [ - "oclif" - ], - "license": "Apache-2.0", - "main": "lib/index.js", - "oclif": { - "commands": "./lib/commands", - "bin": "symbol-bootstrap", - "plugins": [ - "@oclif/plugin-autocomplete", - "@oclif/plugin-help" - ] - }, - "repository": "nemtech/symbol-bootstrap", - "scripts": { - "doc": "typedoc --out \"ts-docs\" src && touch ./ts-docs/.nojekyll", - "lint": "eslint --cache src/ test/ --ext .ts", - "lint:fix": "eslint src/ test/ --ext .ts --fix", - "prettier": "prettier --write ./src ./test", - "style:fix": "npm run create-index-files && npm run prettier && npm run lint:fix && npm run oclif-doc", - "create-index-files": "cti create ./src -b -n -e commands", - "postpack": "shx rm -f oclif.manifest.json", - "posttest": "eslint src/ test/ --ext .ts", - "oclif-doc": "oclif-dev manifest && oclif-dev readme --multi", - "prepack": "shx rm -rf lib && tsc -b && npm run oclif-doc", - "test": "nyc --reporter=lcov --extension .ts mocha -r ts-node/register --timeout 900000 --forbid-only \"test/**/*.test.ts\"", - "e2e": "nyc --reporter=lcov --extension .ts mocha -r ts-node/register --timeout 900000 --forbid-only \"test/**/*.e2e.ts\"", - "coveralls-report": "cat ./coverage/lcov.info | coveralls", - "version": "echo $npm_package_version", - "install-cli": "npm pack && npm i -g", - "clean-network": "symbol-bootstrap clean -t target/bootstrap-test", - "start-network": "symbol-bootstrap start -t target/bootstrap-test -u 'current'" - }, - "types": "lib/index.d.ts" + "prettier": "^2.3.1", + "prettier-plugin-organize-imports": "^2.1.0", + "shx": "^0.3.3", + "ts-node": "^10.0.0", + "typedoc": "^0.21.2", + "typescript": "^4.3.4" + } } diff --git a/packages/bootstrap-cli/README.md b/packages/bootstrap-cli/README.md new file mode 100644 index 000000000..8b0800b07 --- /dev/null +++ b/packages/bootstrap-cli/README.md @@ -0,0 +1,292 @@ +# symbol-bootstrap-cli + +Symbol CLI tool that allows you creating, configuring and running Symbol's simple node networks or nodes to be sync with existing networks. + +[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io) +[![Version](https://img.shields.io/npm/v/symbol-bootstrap.svg)](https://npmjs.org/package/symbol-bootstrap) +[![Downloads/week](https://img.shields.io/npm/dw/symbol-bootstrap.svg)](https://npmjs.org/package/symbol-bootstrap) +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +[![Build Status](https://travis-ci.com/symbol/symbol-bootstrap.svg?branch=main)](https://travis-ci.com/symbol/symbol-bootstrap) +[![Coverage Status](https://coveralls.io/repos/github/symbol/symbol-bootstrap/badge.svg?branch=main)](https://coveralls.io/github/symbol/symbol-bootstrap?branch=main) +[![Api Doc](https://img.shields.io/badge/api-doc-blue.svg)](https://nemtech.github.io/symbol-bootstrap/) + + +* [symbol-bootstrap-cli](#symbol-bootstrap-cli) +* [Why this tool?](#why-this-tool) +* [Key benefits:](#key-benefits) +* [Concepts](#concepts) +* [Requirements](#requirements) +* [Installation](#installation) +* [Wizard](#wizard) +* [E2E Testing support](#e2e-testing-support) +* [Commands](#commands) +* [Command Topics](#command-topics) +* [Development](#development) + + +# Why this tool? + +This tool has been created to address the original problems defined in Symbol's [NIP11](https://github.com/nemtech/NIP/blob/main/NIPs/nip-0011.md). + +# Key benefits: + +- It's an installable cli tool. It's not a repo you need to clone and compile. +- The configuration is parametrized via CLI commands and presets instead of by changing properties files. +- The tools code is unique for any type of network, new networks or nodes in a network. It doesn't need to be copied and pasted in different projects or assemblies. +- The config command runs on the host machine, not via docker making it easier to debug or tune +- It's uses the TS SDK for key generation, vrf transactions, address generation instead of using catapult-tools (nemgen is still used to generate the nemesis block). +- Easier to maintain, the properties files are reused for all nodes, assemblies and network types. +- Network setup (how many database, nodes, rest gateways to run) is defined in presets, users can provide their own ones. +- Docker-compose yaml files are generated based on the network setup/preset instead of being manually created/upgraded. +- The created network (config, nemesis and docker-compose) can be zipped and distributed for other host machines to run it. +- The used docker images versions can be changed via configuration/preset +- It uses the [oclif](https://oclif.io) framework. New commands are easy to add and document. +- It can be included as a npm dependency for clients' e2e testing. + +# Concepts + +## Preset: + +Yaml files that define the configuration and layout of the network and nodes. It defines how many nodes, database, rest gateways, the modes, keys, etc. + +Presets are defined at 4 levels from general to specific: + +- Shared: Default configurations for all the networks. +- Network: It defines the configuration of a given network. +- Assembly: It specifies the creates nodes and services for the given network preset. +- Custom: A user provided yml file (`--customPreset` param) that could override some or all properties in the out-of-the-box presets. + +Properties in each file override the previous values (by object deep merge). + +### Network Presets: + +- [`mainnet`](presets/mainnet/network.yml): Used to created nodes' connected to Symbol's Mainnet network. The [nemesis block](presets/mainnet/seed/00000) is copied over. +- [`testnet`](presets/testnet/network.yml): Used to created nodes' connected to Symbol's Testnet network. The [nemesis block](presets/testnet/seed/00000) is copied over. +- [`dualCurrency`](presets/dualCurrency/network.yml): Used to create new private networks with dual currency configuration, network and harvest currencies. Nemesis block is generated. +- [`singleCurrency`](presets/singleCurrency/network.yml): Used to create private/user networks with a single network currency configuration, just main network currency. Nemesis block is generated. + +### Assemblies: + +- [`dual`](presets/assemblies/assembly-dual.yml): A standard dual node that contains 1 mongo database. 1 api node, 1 rest gateway, and 1 broker. +- [`peer`](presets/assemblies/assembly-peer.yml): A standard peer only node that contains 1 peer node. +- [`api`](presets/assemblies/assembly-api.yml): A standard api node that contains 1 mongo database. 1 api node, 1 rest gateway, and 1 broker. +- [`demo`](presets/assemblies/assembly-demo.yml): A dual node that contains an explorer, web wallet and faucet for test and demonstration purposes. +- [`multinode`](presets/assemblies/assembly-multinode.yml): An special assembly that contains 1 api node and 2 peer only nodes. This assembly is for testing, it showcases how a private network with 3 nodes runs. + +### Custom preset: + +It's the way you can tune the network without modifying the code. It's a yml file (`--customPreset` param) that could override some or all properties in the out-of-the-box presets. + +Custom presets give Symbol Bootstrap its versatility. Check out the custom preset [guides](docs/presetGuides.md)! + +## Target: + +The folder where the generated config, docker files and data are stored. + +The folder structure is: + +- `./preset.yml`: the final generated preset.yml that it's used to configure bootstrap, the nodes, docker, etc. +- `./addresses.yml`: randomly generated data that wasn't provided in the preset. e.g.: SSL keys, nodes' keys, nemesis accounts, generation hash seed, etc. +- `./nodes`: it holds the configuration, data and logs for all the defined node instances. +- `./gateways`: it holds the configuration and logs for all the defined node rest gateways. +- `./nemesis`: The folder used to hold the nemesis block. Block 1 data is generated via `nemgen` tool for new networks. For existing network, it is copied over. +- `./databases`: the location where the mongo data is stored for the different database instances. +- `./docker`: the generated docker-compose.yml, mongo init scripts and server basic bash scripts. +- `./explorers`: the generated explorer configuration. +- `./wallets`: the generated wallet configuration. +- `./reports`: the location of the generated reports. + +Note: **The target folder should not be manually modified**. This tool may override any file in the target folder when doing upgrades. Any custom configuration should be provided via a custom preset. Check out the custom preset [guides](docs/presetGuides.md)! + +# Requirements + +- Node 12.0.0+ +- Docker 18.3.0+ +- Docker Compose 1.25.0+ + +Check your user can run docker without sudo: + +``` +docker run hello-world +``` + +If you see an error like: + +``` +Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock +``` + +Please follow this [guide](https://www.digitalocean.com/community/questions/how-to-fix-docker-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket). + +# Installation + +It's recommended to run the commands from en empty working dir. + +The network configuration, data and docker files will be created inside the target folder ('./target') by default. + +``` +mkdir my-networks +cd my-networks +``` + +Once in the working dir: + + +```sh-session +$ npm install -g symbol-bootstrap +$ symbol-bootstrap COMMAND +running command... +$ symbol-bootstrap (-v|--version|version) +symbol-bootstrap/1.1.0-alpha.0 linux-x64 node-v12.22.1 +$ symbol-bootstrap --help [COMMAND] +USAGE + $ symbol-bootstrap COMMAND +... +``` + + +Validate your environment by running: + +``` +symbol-bootstrap verify +``` + +The general usage would be: + +``` +symbol-bootstrap config -p testnet -a dual +symbol-bootstrap compose +symbol-bootstrap run +``` + +You can aggregate all these commands with this one liner: + +``` +symbol-bootstrap start -p testnet -a dual +``` + +If you need to start fresh, you many need to sudo remove the target folder (docker volumes dirs may be created using sudo). Example: + +``` +sudo rm -rf ./target +``` + +## Examples + +Network presets and assemblies can be combined to generate different types of nodes. Some examples: + +- `$ symbol-bootstrap start -p mainnet -a dual -c customPreset.yml` +- `$ symbol-bootstrap start -p testnet -a peer -c customPreset.yml` +- `$ symbol-bootstrap start -p testnet -a demo -c customPreset.yml` +- `$ symbol-bootstrap start -p dualCurrency -a multinode -c customPreset.yml` +- `$ symbol-bootstrap start -p dualCurrency -a demo -c customPreset.yml` +- `$ symbol-bootstrap start -p dualCurrency -a dual -c customPreset.yml` +- `$ symbol-bootstrap start -p singleCurrency -a multinode -c customPreset.yml` +- `$ symbol-bootstrap start -p singleCurrency -a demo -c customPreset.yml` + +Although some combinations can be done, they may not be really useful. Examples are running `mainnet` and `testnet` combined the `demo` or `multinode` assemblies. + +A custom network preset file can also be provided. This is useful when you have your own custom Symbol network, and you want other nodes to join. +For this case, you provide your own `networkPreset.yml` and nemesis feed folder. The node admin can then run: + +- `$ symbol-bootstrap start -p customNetworkPreset.yml -a dual -c customNodePreset.yml` + +# Wizard + +If this is your first time creating a node, it's recommended to use the Wizard. Just follow the instructions: + +``` +symbol-bootstrap wizard +``` + +# E2E Testing support + +One use case of this CLI is client E2E testing support. If you are coding a Symbol client, you (Travis or Jenkins) can run e2e tests like: + +``` +symbol-bootstrap start -p dualCurrency -a dual -c my_custom_preset.yml --detached --healthCheck +YOUR TEST (e.g: npm run test, gradle test, selenium etc.) +symbol-bootstrap stop +``` + +`--detached` starts the server waiting until it is up (by polling the network http://localhost:3000/node/health). The command will fail if the components are not up in 30 seconds. + +You can also provide your own custom preset (`-c`) if you want your e2e test to start with a specific state (specific balances addresses, mosaics, namespaces, generation hash seed, etc.) + +## Node client E2E via CLI: + +The CLI can also be used as npm project (dev) dependency (`npm install --save-dev symbol-bootstrap`). Then you can integrate the network to your npm test cycle. +Your `package.json` can look like this: + +```yaml + +"devDependencies": { + .... + "symbol-bootstrap": "1.1.x", + .... +} + +scripts": { +... + "clean-network": "symbol-bootstrap clean", + "run-network": "symbol-bootstrap start -p dualCurrency -a dual -c my_custom_preset.yml --detached --healthCheck", + "run-stop": "symbol-bootstrap stop", + "integration-test": "....some mocha/jest/etc tests running against localhost:3000 network....", + "e2e": "npm run clean-network && npm run run-network && npm run integration-test && npm run stop-network", +... +} +``` + +Then, you, Jenkins, Travis or your CI tool can run; + +``` +npm run e2e +``` + +It's recommended to reuse the same server for multiple tests by using `beforeAll`, `afterAll` kind of statements. + +# Commands + + +# Command Topics + +* [`symbol-bootstrap autocomplete`](docs/autocomplete.md) - display autocomplete installation instructions +* [`symbol-bootstrap clean`](docs/clean.md) - It removes the target folder deleting the generated configuration and data +* [`symbol-bootstrap compose`](docs/compose.md) - It generates the `docker-compose.yml` file from the configured network. +* [`symbol-bootstrap config`](docs/config.md) - Command used to set up the configuration files and the nemesis block for the current network +* [`symbol-bootstrap decrypt`](docs/decrypt.md) - It decrypts a yml file using the provided password. The source file can be a custom preset file, a preset.yml file or an addresses.yml. +* [`symbol-bootstrap encrypt`](docs/encrypt.md) - It encrypts a yml file using the provided password. The source files would be a custom preset file, a preset.yml file or an addresses.yml. +* [`symbol-bootstrap enrollRewardProgram`](docs/enrollRewardProgram.md) - It enrols the nodes in the rewards program by announcing the enroll transaction to the registration address. You can also use this command to update the program registration when you change the agent keys (changing the agent-ca-csr) or server host. +* [`symbol-bootstrap healthCheck`](docs/healthCheck.md) - It checks if the services created with docker compose are up and running. +* [`symbol-bootstrap help`](docs/help.md) - display help for symbol-bootstrap +* [`symbol-bootstrap link`](docs/link.md) - It announces VRF and Voting Link transactions to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network. +* [`symbol-bootstrap pack`](docs/pack.md) - It configures and packages your node into a zip file that can be uploaded to the final node machine. +* [`symbol-bootstrap report`](docs/report.md) - it generates reStructuredText (.rst) reports describing the configuration of each node. +* [`symbol-bootstrap resetData`](docs/resetData.md) - It removes the data keeping the generated configuration, certificates, keys and block 1. +* [`symbol-bootstrap run`](docs/run.md) - It boots the network via docker using the generated `docker-compose.yml` file and configuration. The config and compose methods/commands need to be called before this method. This is just a wrapper for the `docker-compose up` bash call. +* [`symbol-bootstrap start`](docs/start.md) - Single command that aggregates config, compose and run in one line! +* [`symbol-bootstrap stop`](docs/stop.md) - It stops the docker-compose network if running (symbol-bootstrap started with --detached). This is just a wrapper for the `docker-compose down` bash call. +* [`symbol-bootstrap updateVotingKeys`](docs/updateVotingKeys.md) - It updates the voting files containing the voting keys when required. +* [`symbol-bootstrap verify`](docs/verify.md) - It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue. +* [`symbol-bootstrap wizard`](docs/wizard.md) - An utility command that will help you configuring node! + + + +# Development + +If you want to contribute to this tool, clone this repo, and run: + +``` +npm run init +npm run build +cd package/bootstrap-cli +npm install -g +``` + +Then, `symbol-bootstrap` runs from the source code. You can now try your features after changing the code. + +Pull Requests are appreciated! Please follow the contributing [guidelines](../../CONTRIBUTING.md). + +Note: cloning this repo is only for people that want to tune the tool in a way it cannot be configured. If this is your case, please provide a feature request. + +General users should install this tool like any other node module. diff --git a/bin/run b/packages/bootstrap-cli/bin/run similarity index 100% rename from bin/run rename to packages/bootstrap-cli/bin/run diff --git a/bin/run.cmd b/packages/bootstrap-cli/bin/run.cmd similarity index 100% rename from bin/run.cmd rename to packages/bootstrap-cli/bin/run.cmd diff --git a/packages/bootstrap-cli/cmds/config-dualCurrency.sh b/packages/bootstrap-cli/cmds/config-dualCurrency.sh new file mode 100755 index 000000000..9a1fce600 --- /dev/null +++ b/packages/bootstrap-cli/cmds/config-dualCurrency.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -e + +symbol-bootstrap config -p dualCurrency -a multinode --report -t target/bootstrap $1 diff --git a/cmds/config-testnet-supernode.sh b/packages/bootstrap-cli/cmds/config-testnet-supernode.sh similarity index 100% rename from cmds/config-testnet-supernode.sh rename to packages/bootstrap-cli/cmds/config-testnet-supernode.sh diff --git a/cmds/enrollRewardProgram-testnet.sh b/packages/bootstrap-cli/cmds/enrollRewardProgram-testnet.sh similarity index 100% rename from cmds/enrollRewardProgram-testnet.sh rename to packages/bootstrap-cli/cmds/enrollRewardProgram-testnet.sh diff --git a/cmds/healthCheck-bootstrap.sh b/packages/bootstrap-cli/cmds/healthCheck-bootstrap.sh similarity index 100% rename from cmds/healthCheck-bootstrap.sh rename to packages/bootstrap-cli/cmds/healthCheck-bootstrap.sh diff --git a/cmds/link-testnet-external-node.sh b/packages/bootstrap-cli/cmds/link-testnet-external-node.sh similarity index 100% rename from cmds/link-testnet-external-node.sh rename to packages/bootstrap-cli/cmds/link-testnet-external-node.sh diff --git a/cmds/link-testnet-supernode-external-node.sh b/packages/bootstrap-cli/cmds/link-testnet-supernode-external-node.sh similarity index 100% rename from cmds/link-testnet-supernode-external-node.sh rename to packages/bootstrap-cli/cmds/link-testnet-supernode-external-node.sh diff --git a/cmds/link-testnet.sh b/packages/bootstrap-cli/cmds/link-testnet.sh similarity index 100% rename from cmds/link-testnet.sh rename to packages/bootstrap-cli/cmds/link-testnet.sh diff --git a/cmds/setup-network.sh b/packages/bootstrap-cli/cmds/setup-network.sh similarity index 100% rename from cmds/setup-network.sh rename to packages/bootstrap-cli/cmds/setup-network.sh diff --git a/packages/bootstrap-cli/cmds/start-dualCurrency-custom.sh b/packages/bootstrap-cli/cmds/start-dualCurrency-custom.sh new file mode 100755 index 000000000..c5d752452 --- /dev/null +++ b/packages/bootstrap-cli/cmds/start-dualCurrency-custom.sh @@ -0,0 +1,3 @@ +#!/bin/bash +set -e +symbol-bootstrap start -u current -p dualCurrency -a multinode -c test/custom_preset.yml -t target/bootstrap-custom --password 1234 $1 diff --git a/packages/bootstrap-cli/cmds/start-dualCurrency-demo.sh b/packages/bootstrap-cli/cmds/start-dualCurrency-demo.sh new file mode 100755 index 000000000..54829c549 --- /dev/null +++ b/packages/bootstrap-cli/cmds/start-dualCurrency-demo.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -e + +symbol-bootstrap start -p dualCurrency -a demo -t target/bootstrap --password 1234 -c test/full_preset.yml $1 $2 $3 diff --git a/packages/bootstrap-cli/cmds/start-dualCurrency-freenodes.sh b/packages/bootstrap-cli/cmds/start-dualCurrency-freenodes.sh new file mode 100755 index 000000000..d2afd9027 --- /dev/null +++ b/packages/bootstrap-cli/cmds/start-dualCurrency-freenodes.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -e + +symbol-bootstrap start --reset -p dualCurrency -a multinode --customPreset ./test/freenodes_preset.yml --user current -t target/bootstrap-freenodes diff --git a/packages/bootstrap-cli/cmds/start-dualCurrency-repeat.sh b/packages/bootstrap-cli/cmds/start-dualCurrency-repeat.sh new file mode 100755 index 000000000..b31b041af --- /dev/null +++ b/packages/bootstrap-cli/cmds/start-dualCurrency-repeat.sh @@ -0,0 +1,4 @@ +#!/bin/bash +docker stop $(docker ps -aq) +docker rm $(docker ps -aq) +symbol-bootstrap start -p dualCurrency -a multinode -c test/repeat_preset.yml -t target/bootstrap-repeat --password 1234 $1 diff --git a/packages/bootstrap-cli/cmds/start-dualCurrency.sh b/packages/bootstrap-cli/cmds/start-dualCurrency.sh new file mode 100755 index 000000000..d6f768e19 --- /dev/null +++ b/packages/bootstrap-cli/cmds/start-dualCurrency.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e + +# docker rm -f $(docker ps -aq) +symbol-bootstrap start -p dualCurrency -a multinode -u current -t target/bootstrap -c test/custom_bootstrap.yml --password 1234 $1 diff --git a/cmds/start-mainnet-dual.sh b/packages/bootstrap-cli/cmds/start-mainnet-dual.sh similarity index 100% rename from cmds/start-mainnet-dual.sh rename to packages/bootstrap-cli/cmds/start-mainnet-dual.sh diff --git a/cmds/start-mainnet-zip-configs.sh b/packages/bootstrap-cli/cmds/start-mainnet-zip-configs.sh similarity index 100% rename from cmds/start-mainnet-zip-configs.sh rename to packages/bootstrap-cli/cmds/start-mainnet-zip-configs.sh diff --git a/cmds/start-peers.sh b/packages/bootstrap-cli/cmds/start-peers.sh similarity index 100% rename from cmds/start-peers.sh rename to packages/bootstrap-cli/cmds/start-peers.sh diff --git a/packages/bootstrap-cli/cmds/start-singleCurrency.sh b/packages/bootstrap-cli/cmds/start-singleCurrency.sh new file mode 100755 index 000000000..16bf33e22 --- /dev/null +++ b/packages/bootstrap-cli/cmds/start-singleCurrency.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e + +# docker rm -f $(docker ps -aq) +symbol-bootstrap start -p singleCurrency -u current -t target/singleCurrency -c test/custom_bootstrap.yml --password 1234 $1 diff --git a/cmds/start-testnet-api.sh b/packages/bootstrap-cli/cmds/start-testnet-api.sh similarity index 100% rename from cmds/start-testnet-api.sh rename to packages/bootstrap-cli/cmds/start-testnet-api.sh diff --git a/cmds/start-testnet-demo.sh b/packages/bootstrap-cli/cmds/start-testnet-demo.sh similarity index 100% rename from cmds/start-testnet-demo.sh rename to packages/bootstrap-cli/cmds/start-testnet-demo.sh diff --git a/cmds/start-testnet-dual.sh b/packages/bootstrap-cli/cmds/start-testnet-dual.sh similarity index 100% rename from cmds/start-testnet-dual.sh rename to packages/bootstrap-cli/cmds/start-testnet-dual.sh diff --git a/cmds/start-testnet-peer.sh b/packages/bootstrap-cli/cmds/start-testnet-peer.sh similarity index 100% rename from cmds/start-testnet-peer.sh rename to packages/bootstrap-cli/cmds/start-testnet-peer.sh diff --git a/cmds/start-testnet-supernode-demo.sh b/packages/bootstrap-cli/cmds/start-testnet-supernode-demo.sh similarity index 100% rename from cmds/start-testnet-supernode-demo.sh rename to packages/bootstrap-cli/cmds/start-testnet-supernode-demo.sh diff --git a/cmds/start-testnet-supernode.sh b/packages/bootstrap-cli/cmds/start-testnet-supernode.sh similarity index 100% rename from cmds/start-testnet-supernode.sh rename to packages/bootstrap-cli/cmds/start-testnet-supernode.sh diff --git a/cmds/start-testnet-sync.sh b/packages/bootstrap-cli/cmds/start-testnet-sync.sh similarity index 100% rename from cmds/start-testnet-sync.sh rename to packages/bootstrap-cli/cmds/start-testnet-sync.sh diff --git a/cmds/start-testnet-voting.sh b/packages/bootstrap-cli/cmds/start-testnet-voting.sh similarity index 100% rename from cmds/start-testnet-voting.sh rename to packages/bootstrap-cli/cmds/start-testnet-voting.sh diff --git a/cmds/start-testnet.sh b/packages/bootstrap-cli/cmds/start-testnet.sh similarity index 100% rename from cmds/start-testnet.sh rename to packages/bootstrap-cli/cmds/start-testnet.sh diff --git a/cmds/stop-bootstrap.sh b/packages/bootstrap-cli/cmds/stop-bootstrap.sh similarity index 100% rename from cmds/stop-bootstrap.sh rename to packages/bootstrap-cli/cmds/stop-bootstrap.sh diff --git a/cmds/stop-testnet-supernode.sh b/packages/bootstrap-cli/cmds/stop-testnet-supernode.sh similarity index 100% rename from cmds/stop-testnet-supernode.sh rename to packages/bootstrap-cli/cmds/stop-testnet-supernode.sh diff --git a/cmds/upgradeVotingKeys-testnet-supernode.sh b/packages/bootstrap-cli/cmds/upgradeVotingKeys-testnet-supernode.sh similarity index 100% rename from cmds/upgradeVotingKeys-testnet-supernode.sh rename to packages/bootstrap-cli/cmds/upgradeVotingKeys-testnet-supernode.sh diff --git a/docs/autocomplete.md b/packages/bootstrap-cli/docs/autocomplete.md similarity index 100% rename from docs/autocomplete.md rename to packages/bootstrap-cli/docs/autocomplete.md diff --git a/docs/clean.md b/packages/bootstrap-cli/docs/clean.md similarity index 82% rename from docs/clean.md rename to packages/bootstrap-cli/docs/clean.md index 08fd07255..382f8fc2e 100644 --- a/docs/clean.md +++ b/packages/bootstrap-cli/docs/clean.md @@ -20,5 +20,3 @@ OPTIONS EXAMPLE $ symbol-bootstrap clean ``` - -_See code: [src/commands/clean.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/clean.ts)_ diff --git a/docs/compose.md b/packages/bootstrap-cli/docs/compose.md similarity index 91% rename from docs/compose.md rename to packages/bootstrap-cli/docs/compose.md index ecb65b930..dcf5ac4fb 100644 --- a/docs/compose.md +++ b/packages/bootstrap-cli/docs/compose.md @@ -32,5 +32,3 @@ OPTIONS EXAMPLE $ symbol-bootstrap compose ``` - -_See code: [src/commands/compose.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/compose.ts)_ diff --git a/packages/bootstrap-cli/docs/config.md b/packages/bootstrap-cli/docs/config.md new file mode 100644 index 000000000..cc24a0775 --- /dev/null +++ b/packages/bootstrap-cli/docs/config.md @@ -0,0 +1,54 @@ +`symbol-bootstrap config` +========================= + +Command used to set up the configuration files and the nemesis block for the current network + +* [`symbol-bootstrap config`](#symbol-bootstrap-config) + +## `symbol-bootstrap config` + +Command used to set up the configuration files and the nemesis block for the current network + +``` +USAGE + $ symbol-bootstrap config + +OPTIONS + -a, --assembly=assembly The assembly that define the node(s) layout. It can be provided via custom preset or + cli parameter. If not provided, the value is resolved from the target/preset.yml + file. + + -c, --customPreset=customPreset External preset file. Values in this file will override the provided presets. + + -h, --help It shows the help of this command. + + -p, --preset=preset The network preset. It can be provided via custom preset or cli parameter. If not + provided, the value is resolved from the target/preset.yml file. + + -r, --reset It resets the configuration generating a new one. + + -t, --target=target [default: target] The target folder where the symbol-bootstrap network is generated + + -u, --user=user [default: current] User used to run docker images when creating configuration files + like certificates or nemesis block. "current" means the current user. + + --noPassword When provided, Bootstrap will not use a password, so private keys will be stored in + plain text. Use with caution. + + --password=password A password used to encrypt and decrypt private keys in preset files like + addresses.yml and preset.yml. Bootstrap prompts for a password by default, can be + provided in the command line (--password=XXXX) or disabled in the command line + (--noPassword). + + --report It generates reStructuredText (.rst) reports describing the configuration of each + node. + + --upgrade It regenerates the configuration reusing the previous keys. Use this flag when + upgrading the version of bootstrap to keep your node up to date without dropping the + local data. Backup the target folder before upgrading. + +EXAMPLES + $ symbol-bootstrap config -p dualCurrency -a demo + $ symbol-bootstrap config -p testnet -a dual --password 1234 + $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap config -p testnet -a dual +``` diff --git a/docs/decrypt.md b/packages/bootstrap-cli/docs/decrypt.md similarity index 95% rename from docs/decrypt.md rename to packages/bootstrap-cli/docs/decrypt.md index a71d856f8..d6d962b9a 100644 --- a/docs/decrypt.md +++ b/packages/bootstrap-cli/docs/decrypt.md @@ -55,5 +55,3 @@ EXAMPLES $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap decrypt --source target/addresses.yml --destination plain-addresses.yml ``` - -_See code: [src/commands/decrypt.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/decrypt.ts)_ diff --git a/docs/encrypt.md b/packages/bootstrap-cli/docs/encrypt.md similarity index 95% rename from docs/encrypt.md rename to packages/bootstrap-cli/docs/encrypt.md index cccda09c3..5525e6d23 100644 --- a/docs/encrypt.md +++ b/packages/bootstrap-cli/docs/encrypt.md @@ -45,5 +45,3 @@ EXAMPLES $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap encrypt --source plain-custom-preset.yml --destination encrypted-custom-preset.yml ``` - -_See code: [src/commands/encrypt.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/encrypt.ts)_ diff --git a/docs/enrollRewardProgram.md b/packages/bootstrap-cli/docs/enrollRewardProgram.md similarity index 95% rename from docs/enrollRewardProgram.md rename to packages/bootstrap-cli/docs/enrollRewardProgram.md index 172ecd103..17ec02651 100644 --- a/docs/enrollRewardProgram.md +++ b/packages/bootstrap-cli/docs/enrollRewardProgram.md @@ -53,5 +53,3 @@ EXAMPLES $ symbol-bootstrap enrollRewardProgram --password 1234 --url http://external-rest:3000 $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap enrollRewardProgram --url http://external-rest:3000 ``` - -_See code: [src/commands/enrollRewardProgram.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/enrollRewardProgram.ts)_ diff --git a/packages/bootstrap-cli/docs/healthCheck.md b/packages/bootstrap-cli/docs/healthCheck.md new file mode 100644 index 000000000..b12254fa5 --- /dev/null +++ b/packages/bootstrap-cli/docs/healthCheck.md @@ -0,0 +1,37 @@ +`symbol-bootstrap healthCheck` +============================== + +It checks if the services created with docker compose are up and running. + +This command checks: +- Whether the docker containers are running. +- Whether the services' exposed ports are listening. +- Whether the rest gateways' /node/health are OK. + +The health check process handles 'repeat' and custom 'openPort' services. + +* [`symbol-bootstrap healthCheck`](#symbol-bootstrap-healthcheck) + +## `symbol-bootstrap healthCheck` + +It checks if the services created with docker compose are up and running. + +``` +USAGE + $ symbol-bootstrap healthCheck + +OPTIONS + -h, --help It shows the help of this command. + -t, --target=target [default: target] The target folder where the symbol-bootstrap network is generated + +DESCRIPTION + This command checks: + - Whether the docker containers are running. + - Whether the services' exposed ports are listening. + - Whether the rest gateways' /node/health are OK. + + The health check process handles 'repeat' and custom 'openPort' services. + +EXAMPLE + $ symbol-bootstrap healthCheck +``` diff --git a/packages/bootstrap-cli/docs/help.md b/packages/bootstrap-cli/docs/help.md new file mode 100644 index 000000000..f0e2ebf90 --- /dev/null +++ b/packages/bootstrap-cli/docs/help.md @@ -0,0 +1,23 @@ +`symbol-bootstrap help` +======================= + +display help for symbol-bootstrap + +* [`symbol-bootstrap help [COMMAND]`](#symbol-bootstrap-help-command) + +## `symbol-bootstrap help [COMMAND]` + +display help for symbol-bootstrap + +``` +USAGE + $ symbol-bootstrap help [COMMAND] + +ARGUMENTS + COMMAND command to show help for + +OPTIONS + --all see all commands in CLI +``` + +_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v3.2.2/src/commands/help.ts)_ diff --git a/packages/bootstrap-cli/docs/link.md b/packages/bootstrap-cli/docs/link.md new file mode 100644 index 000000000..0fb56374b --- /dev/null +++ b/packages/bootstrap-cli/docs/link.md @@ -0,0 +1,50 @@ +`symbol-bootstrap link` +======================= + +It announces VRF and Voting Link transactions to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network. + +* [`symbol-bootstrap link`](#symbol-bootstrap-link) + +## `symbol-bootstrap link` + +It announces VRF and Voting Link transactions to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network. + +``` +USAGE + $ symbol-bootstrap link + +OPTIONS + -c, --customPreset=customPreset This command uses the encrypted addresses.yml to resolve the main private key. If the + main private is only stored in the custom preset, you can provide it using this + param. Otherwise, the command may ask for it when required. + + -h, --help It shows the help of this command. + + -t, --target=target [default: target] The target folder where the symbol-bootstrap network is generated + + -u, --url=url [default: http://localhost:3000] the network url + + --maxFee=maxFee the max fee used when announcing (absolute). The node min multiplier will be used if + it is not provided. + + --noPassword When provided, Bootstrap will not use a password, so private keys will be stored in + plain text. Use with caution. + + --password=password A password used to encrypt and decrypt private keys in preset files like + addresses.yml and preset.yml. Bootstrap prompts for a password by default, can be + provided in the command line (--password=XXXX) or disabled in the command line + (--noPassword). + + --ready If --ready is provided, the command will not ask for confirmation when announcing + transactions. + + --unlink Perform "Unlink" transactions unlinking the voting and VRF keys from the node signer + account + + --useKnownRestGateways Use the best NEM node available when announcing. Otherwise the command will use the + node provided by the --url parameter. + +EXAMPLES + $ symbol-bootstrap link + $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap link --unlink --useKnownRestGateways +``` diff --git a/packages/bootstrap-cli/docs/pack.md b/packages/bootstrap-cli/docs/pack.md new file mode 100644 index 000000000..37e165356 --- /dev/null +++ b/packages/bootstrap-cli/docs/pack.md @@ -0,0 +1,58 @@ +`symbol-bootstrap pack` +======================= + +It configures and packages your node into a zip file that can be uploaded to the final node machine. + +* [`symbol-bootstrap pack`](#symbol-bootstrap-pack) + +## `symbol-bootstrap pack` + +It configures and packages your node into a zip file that can be uploaded to the final node machine. + +``` +USAGE + $ symbol-bootstrap pack + +OPTIONS + -a, --assembly=assembly The assembly that define the node(s) layout. It can be provided via custom preset or + cli parameter. If not provided, the value is resolved from the target/preset.yml + file. + + -c, --customPreset=customPreset External preset file. Values in this file will override the provided presets. + + -h, --help It shows the help of this command. + + -p, --preset=preset The network preset. It can be provided via custom preset or cli parameter. If not + provided, the value is resolved from the target/preset.yml file. + + -r, --reset It resets the configuration generating a new one. + + -t, --target=target [default: target] The target folder where the symbol-bootstrap network is generated + + -u, --user=user [default: current] User used to run docker images when creating configuration files + like certificates or nemesis block. "current" means the current user. + + --noPassword When provided, Bootstrap will not use a password, so private keys will be stored in + plain text. Use with caution. + + --password=password A password used to encrypt and decrypt private keys in preset files like + addresses.yml and preset.yml. Bootstrap prompts for a password by default, can be + provided in the command line (--password=XXXX) or disabled in the command line + (--noPassword). + + --ready If --ready is provided, the command will not ask offline confirmation. + + --report It generates reStructuredText (.rst) reports describing the configuration of each + node. + + --upgrade It regenerates the configuration reusing the previous keys. Use this flag when + upgrading the version of bootstrap to keep your node up to date without dropping the + local data. Backup the target folder before upgrading. + +EXAMPLES + $ symbol-bootstrap pack + $ symbol-bootstrap pack -c custom-preset.yml + $ symbol-bootstrap pack -p testnet -a dual -c custom-preset.yml + $ symbol-bootstrap pack -p mainnet -a dual --password 1234 -c custom-preset.yml + $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap pack -p mainnet -a dual -c custom-preset.yml +``` diff --git a/docs/presetGuides.md b/packages/bootstrap-cli/docs/presetGuides.md similarity index 100% rename from docs/presetGuides.md rename to packages/bootstrap-cli/docs/presetGuides.md diff --git a/docs/report.md b/packages/bootstrap-cli/docs/report.md similarity index 82% rename from docs/report.md rename to packages/bootstrap-cli/docs/report.md index badcbed9a..506f24672 100644 --- a/docs/report.md +++ b/packages/bootstrap-cli/docs/report.md @@ -20,5 +20,3 @@ OPTIONS EXAMPLE $ symbol-bootstrap report ``` - -_See code: [src/commands/report.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/report.ts)_ diff --git a/docs/resetData.md b/packages/bootstrap-cli/docs/resetData.md similarity index 82% rename from docs/resetData.md rename to packages/bootstrap-cli/docs/resetData.md index 1fe2ecf4f..e48d59984 100644 --- a/docs/resetData.md +++ b/packages/bootstrap-cli/docs/resetData.md @@ -20,5 +20,3 @@ OPTIONS EXAMPLE $ symbol-bootstrap resetData ``` - -_See code: [src/commands/resetData.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/resetData.ts)_ diff --git a/docs/run.md b/packages/bootstrap-cli/docs/run.md similarity index 94% rename from docs/run.md rename to packages/bootstrap-cli/docs/run.md index 12c40c0d6..bf3d48a99 100644 --- a/docs/run.md +++ b/packages/bootstrap-cli/docs/run.md @@ -52,5 +52,3 @@ OPTIONS EXAMPLE $ symbol-bootstrap run ``` - -_See code: [src/commands/run.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/run.ts)_ diff --git a/docs/start.md b/packages/bootstrap-cli/docs/start.md similarity index 80% rename from docs/start.md rename to packages/bootstrap-cli/docs/start.md index f8dc3e348..b5e79097f 100644 --- a/docs/start.md +++ b/packages/bootstrap-cli/docs/start.md @@ -15,13 +15,14 @@ USAGE OPTIONS -a, --assembly=assembly - The assembly, example "dual" for testnet. If not provided, the value is resolved from the target/preset.yml file. + The assembly that define the node(s) layout. It can be provided via custom preset or cli parameter. If not provided, + the value is resolved from the target/preset.yml file. -b, --build If provided, docker-compose will run with -b (--build) -c, --customPreset=customPreset - External preset file. Values in this file will override the provided presets + External preset file. Values in this file will override the provided presets. -d, --detached If provided, docker-compose will run with -d (--detached) and this command will wait unit server is running before @@ -30,12 +31,12 @@ OPTIONS -h, --help It shows the help of this command. - -p, --preset=(bootstrap|testnet|mainnet) - The network preset, can be provided via custom preset or cli parameter. If not provided, the value is resolved from - the target/preset.yml file. + -p, --preset=preset + The network preset. It can be provided via custom preset or cli parameter. If not provided, the value is resolved + from the target/preset.yml file. -r, --reset - It resets the configuration generating a new one + It resets the configuration generating a new one. -t, --target=target [default: target] The target folder where the symbol-bootstrap network is generated @@ -79,15 +80,12 @@ OPTIONS --upgrade It regenerates the configuration reusing the previous keys. Use this flag when upgrading the version of bootstrap to - keep your node up to date without dropping the local data. The original preset (-t), assembly (-a), and custom - preset (-a) must be used. Backup the target folder before upgrading. + keep your node up to date without dropping the local data. Backup the target folder before upgrading. EXAMPLES - $ symbol-bootstrap start - $ symbol-bootstrap start -p bootstrap + $ symbol-bootstrap start -p singleCurrency -a multinode + $ symbol-bootstrap start -p dualCurrency -a multinode $ symbol-bootstrap start -p testnet -a dual $ symbol-bootstrap start -p testnet -a dual --password 1234 $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap start -p testnet -a dual ``` - -_See code: [src/commands/start.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/start.ts)_ diff --git a/docs/stop.md b/packages/bootstrap-cli/docs/stop.md similarity index 85% rename from docs/stop.md rename to packages/bootstrap-cli/docs/stop.md index fbf60be9b..c51960108 100644 --- a/docs/stop.md +++ b/packages/bootstrap-cli/docs/stop.md @@ -20,5 +20,3 @@ OPTIONS EXAMPLE $ symbol-bootstrap stop ``` - -_See code: [src/commands/stop.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/stop.ts)_ diff --git a/docs/updateVotingKeys.md b/packages/bootstrap-cli/docs/updateVotingKeys.md similarity index 93% rename from docs/updateVotingKeys.md rename to packages/bootstrap-cli/docs/updateVotingKeys.md index e4611f903..b3f845bd8 100644 --- a/docs/updateVotingKeys.md +++ b/packages/bootstrap-cli/docs/updateVotingKeys.md @@ -43,5 +43,3 @@ DESCRIPTION EXAMPLE $ symbol-bootstrap updateVotingKeys ``` - -_See code: [src/commands/updateVotingKeys.ts](https://github.com/nemtech/symbol-bootstrap/blob/v1.0.8/src/commands/updateVotingKeys.ts)_ diff --git a/packages/bootstrap-cli/docs/verify.md b/packages/bootstrap-cli/docs/verify.md new file mode 100644 index 000000000..c56307b75 --- /dev/null +++ b/packages/bootstrap-cli/docs/verify.md @@ -0,0 +1,21 @@ +`symbol-bootstrap verify` +========================= + +It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue. + +* [`symbol-bootstrap verify`](#symbol-bootstrap-verify) + +## `symbol-bootstrap verify` + +It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue. + +``` +USAGE + $ symbol-bootstrap verify + +OPTIONS + -h, --help It shows the help of this command. + +EXAMPLE + $ symbol-bootstrap verify +``` diff --git a/packages/bootstrap-cli/docs/wizard.md b/packages/bootstrap-cli/docs/wizard.md new file mode 100644 index 000000000..895e9d7f4 --- /dev/null +++ b/packages/bootstrap-cli/docs/wizard.md @@ -0,0 +1,42 @@ +`symbol-bootstrap wizard` +========================= + +An utility command that will help you configuring node! + +* [`symbol-bootstrap wizard`](#symbol-bootstrap-wizard) + +## `symbol-bootstrap wizard` + +An utility command that will help you configuring node! + +``` +USAGE + $ symbol-bootstrap wizard + +OPTIONS + -c, --customPreset=customPreset + [default: custom-preset.yml] The custom preset to be created. + + -h, --help + It shows the help of this command. + + -t, --target=target + [default: target] The target folder where the symbol-bootstrap network is generated + + --network=mainnet|testnet|singleCurrencyPrivateNetwork|dualCurrencyPrivateNetwork|customNetwork + The node or network you want to create + + --noPassword + When provided, Bootstrap will not use a password, so private keys will be stored in plain text. Use with caution. + + --password=password + A password used to encrypt and decrypt private keys in preset files like addresses.yml and preset.yml. Bootstrap + prompts for a password by default, can be provided in the command line (--password=XXXX) or disabled in the command + line (--noPassword). + + --ready + If --ready is provided, the command will not ask offline confirmation. + +EXAMPLE + $ symbol-bootstrap wizard +``` diff --git a/packages/bootstrap-cli/package-lock.json b/packages/bootstrap-cli/package-lock.json new file mode 100644 index 000000000..5d542189e --- /dev/null +++ b/packages/bootstrap-cli/package-lock.json @@ -0,0 +1,5726 @@ +{ + "name": "symbol-bootstrap", + "version": "1.1.0-alpha.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "symbol-bootstrap", + "version": "1.1.0-alpha.0", + "license": "Apache-2.0", + "dependencies": { + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@oclif/plugin-autocomplete": "^0.3.0", + "@oclif/plugin-help": "^3.2.2", + "archiver": "^5.3.0", + "figlet": "^1.5.0", + "inquirer": "^8.1.1", + "lodash": "^4.17.21", + "symbol-hd-wallets": "^0.14.1-alpha-202103052158", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "winston": "^3.3.3" + }, + "bin": { + "symbol-bootstrap": "bin/run" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@js-joda/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz", + "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oclif/command": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.0.tgz", + "integrity": "sha512-5vwpq6kbvwkQwKqAoOU3L72GZ3Ta8RRrewKj9OJRolx28KLJJ8Dg9Rf7obRwt5jQA9bkYd8gqzMTrI7H3xLfaw==", + "dependencies": { + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.3", + "@oclif/plugin-help": "^3", + "debug": "^4.1.1", + "semver": "^7.3.2" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "@oclif/config": "^1" + } + }, + "node_modules/@oclif/config": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.17.0.tgz", + "integrity": "sha512-Lmfuf6ubjQ4ifC/9bz1fSCHc6F6E653oyaRXxg+lgT4+bYf9bk+nqrUpAbrXyABkCqgIBiFr3J4zR/kiFdE1PA==", + "dependencies": { + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-wsl": "^2.1.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/errors": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz", + "integrity": "sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==", + "dependencies": { + "clean-stack": "^3.0.0", + "fs-extra": "^8.1", + "indent-string": "^4.0.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/linewrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", + "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==" + }, + "node_modules/@oclif/parser": { + "version": "3.8.5", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.5.tgz", + "integrity": "sha512-yojzeEfmSxjjkAvMRj0KzspXlMjCfBzNRPkWw8ZwOSoNWoJn+OCS/m/S+yfV6BvAM4u2lTzX9Y5rCbrFIgkJLg==", + "dependencies": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^2.4.2", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/parser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@oclif/plugin-autocomplete": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.3.0.tgz", + "integrity": "sha512-gCuIUCswvoU1BxDDvHSUGxW8rFagiacle8jHqE49+WnuniXD/N8NmJvnzmlNyc8qLE192CnKK+qYyAF+vaFQBg==", + "dependencies": { + "@oclif/command": "^1.5.13", + "@oclif/config": "^1.13.0", + "chalk": "^4.1.0", + "cli-ux": "^5.2.1", + "debug": "^4.0.0", + "fs-extra": "^9.0.1", + "moment": "^2.22.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@oclif/plugin-help": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.2.tgz", + "integrity": "sha512-SPZ8U8PBYK0n4srFjCLedk0jWU4QlxgEYLCXIBShJgOwPhTTQknkUlsEwaMIevvCU4iCQZhfMX+D8Pz5GZjFgA==", + "dependencies": { + "@oclif/command": "^1.5.20", + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.2.2", + "chalk": "^4.1.0", + "indent-string": "^4.0.0", + "lodash.template": "^4.4.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/plugin-help/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@oclif/plugin-help/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@oclif/plugin-help/node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@oclif/plugin-help/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@oclif/plugin-help/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@oclif/plugin-help/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/plugin-help/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@oclif/plugin-help/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/plugin-help/node_modules/wrap-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", + "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@oclif/plugin-help/node_modules/wrap-ansi/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@oclif/plugin-help/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@oclif/screen": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", + "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==", + "engines": { + "node": ">=8.0.0" + } + }, + "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/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + }, + "node_modules/archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.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/base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "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/bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "engines": { + "node": "*" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bip32": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-1.0.4.tgz", + "integrity": "sha512-8T21eLWylZETolyqCPgia+MNp+kY37zFr7PTFDTPObHeNi9JlfG4qGIh8WzerIJidtwoK+NsWq2I5i66YfHoIw==", + "dependencies": { + "bs58check": "^2.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "tiny-secp256k1": "^1.0.0", + "typeforce": "^1.11.5", + "wif": "^2.0.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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/bip44-constants": { + "version": "8.0.103", + "resolved": "https://registry.npmjs.org/bip44-constants/-/bip44-constants-8.0.103.tgz", + "integrity": "sha512-wuGsY9IKUS9GC5Sf/Acb5jLJZI3Z8qsMoQHWldnQyoVUlij4y8e5srh28Iqul1HwK+elPsAYGNYKtYhovjvNxA==" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "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.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.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/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=" + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/catbuffer-typescript": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/catbuffer-typescript/-/catbuffer-typescript-0.1.1.tgz", + "integrity": "sha512-r/z3UKG3YCCdsTEHRXGe3IQxA8OaBRBE31e9du2LOaLStGxYCmxUjfRtJ/DyKfgpS55fJPl3w/VFMnsfwIHmkA==" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "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/clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "dependencies": { + "escape-string-regexp": "4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clean-stack/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-progress": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", + "integrity": "sha512-g7rLWfhAo/7pF+a/STFH/xPyosaL1zgADhI0OM83hl3c7S43iGvJWEAV2QuDOnQ8i6EMBj/u4+NTd0d5L+4JfA==", + "dependencies": { + "colors": "^1.1.2", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-ux": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.6.3.tgz", + "integrity": "sha512-/oDU4v8BiDjX2OKcSunGH0iGDiEtj2rZaGyqNuv9IT4CgcSMyVWAMfn0+rEHaOc4n9ka78B0wo1+N1QX89f7mw==", + "dependencies": { + "@oclif/command": "^1.6.0", + "@oclif/errors": "^1.2.1", + "@oclif/linewrap": "^1.0.0", + "@oclif/screen": "^1.0.3", + "ansi-escapes": "^4.3.0", + "ansi-styles": "^4.2.0", + "cardinal": "^2.1.1", + "chalk": "^4.1.0", + "clean-stack": "^3.0.0", + "cli-progress": "^3.4.0", + "extract-stack": "^2.0.0", + "fs-extra": "^8.1", + "hyperlinker": "^1.0.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "js-yaml": "^3.13.1", + "lodash": "^4.17.11", + "natural-orderby": "^2.0.1", + "object-treeify": "^1.1.4", + "password-prompt": "^1.1.2", + "semver": "^7.3.2", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "supports-color": "^8.1.0", + "supports-hyperlinks": "^2.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/cli-ux/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-ux/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-ux/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-ux/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-ux/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/cli-ux/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-ux/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "dependencies": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "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/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/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/crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dependencies": { + "clone": "^1.0.2" + } + }, + "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/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz", + "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "node_modules/fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fecha": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + }, + "node_modules/figlet": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", + "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/futoin-hkdf": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz", + "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "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/hyperlinker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", + "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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/inquirer": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.1.tgz", + "integrity": "sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.3.0", + "run-async": "^2.4.0", + "rxjs": "^6.6.6", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "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-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, + "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/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, + "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/js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logform": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "dependencies": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "triple-beam": "^1.3.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/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/merkletreejs": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.22.tgz", + "integrity": "sha512-MYWF5KoCkXcMkFtuB4O40k4yYxmhwb1TiaLvJaj1L5w4LQ66E2sukeslfJjGmaGqWHP4oMK06lgGZgODHxU3bw==", + "dependencies": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^3.1.9-1", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/merkletreejs/node_modules/crypto-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", + "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "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.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "node_modules/natural-orderby": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", + "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==", + "engines": { + "node": "*" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "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/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-treeify": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", + "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "node_modules/password-prompt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", + "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", + "dependencies": { + "ansi-escapes": "^3.1.0", + "cross-spawn": "^6.0.5" + } + }, + "node_modules/password-prompt/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "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/printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/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/readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "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/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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/simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "engines": { + "node": ">=0.10.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/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "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/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-hd-wallets": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/symbol-hd-wallets/-/symbol-hd-wallets-0.14.1.tgz", + "integrity": "sha512-jMYbVHlGtB9IiufME4nGDKEvYXz7e6YfBK0eulGhetMH/0TZ+qIomCmNaMU2EfJEeywo0Kb6TIMIN4AEq9ObBA==", + "dependencies": { + "bip32": "^1.0.4", + "bip39": "^3.0.2", + "bip44-constants": "^8.0.5", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "crypto-js": "^4.0.0", + "js-sha3": "^0.8.0", + "tiny-secp256k1": "^1.1.3", + "tweetnacl": "^1.0.3" + } + }, + "node_modules/symbol-openapi-typescript-fetch-client": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/symbol-openapi-typescript-fetch-client/-/symbol-openapi-typescript-fetch-client-0.11.2.tgz", + "integrity": "sha512-A1MAN8/UWlaCEibBf6zxkduZwDNSvWwLPp6JB0GeYI/FAOrw/9nLyuS/NJQ3siGAUclnuejH1wG7KdUg0/4RSw==" + }, + "node_modules/symbol-sdk": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-sdk/-/symbol-sdk-1.0.1.tgz", + "integrity": "sha512-G4sdGBfggTSqKs9XchMQAtOfl80Z2eARafxZnzje5qxzfUSQUCFYdBP7IJiA2PDoeyfXJJpzWWTlgq9EzvKm1A==", + "dependencies": { + "@js-joda/core": "^3.2.0", + "bluebird": "^3.7.2", + "catbuffer-typescript": "0.1.1", + "crypto-js": "^4.0.0", + "diff": "^4.0.2", + "futoin-hkdf": "^1.3.2", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "long": "^4.0.0", + "merkletreejs": "^0.2.9", + "minimist": "^1.2.5", + "node-fetch": "^2.6.0", + "ripemd160": "^2.0.2", + "rxjs": "^6.6.3", + "rxjs-compat": "^6.6.3", + "symbol-openapi-typescript-fetch-client": "0.11.2", + "tweetnacl": "^1.0.3", + "utf8": "^2.1.2", + "ws": "^7.3.1" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tiny-secp256k1": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz", + "integrity": "sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.3.0", + "bn.js": "^4.11.8", + "create-hmac": "^1.1.7", + "elliptic": "^6.4.0", + "nan": "^2.13.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.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/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typeforce": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", + "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "node_modules/utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + }, + "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/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web3-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.4.0.tgz", + "integrity": "sha512-b8mEhwh/J928Xk+SQFjtqrR2EGPhpknWLcIt9aCpVPVRXiqjUGo/kpOHKz0azu9c6/onEJ9tWXZt0cVjmH0N5Q==", + "dependencies": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.12.1", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wif": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", + "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", + "dependencies": { + "bs58check": "<3.0.0" + } + }, + "node_modules/winston": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "dependencies": { + "@dabh/diagnostics": "^2.0.2", + "async": "^3.1.0", + "is-stream": "^2.0.0", + "logform": "^2.2.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "dependencies": { + "readable-stream": "^2.3.7", + "triple-beam": "^1.2.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/winston-transport/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/winston-transport/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", + "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==", + "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/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + }, + "dependencies": { + "@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "@js-joda/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz", + "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@oclif/command": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.0.tgz", + "integrity": "sha512-5vwpq6kbvwkQwKqAoOU3L72GZ3Ta8RRrewKj9OJRolx28KLJJ8Dg9Rf7obRwt5jQA9bkYd8gqzMTrI7H3xLfaw==", + "requires": { + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.3", + "@oclif/plugin-help": "^3", + "debug": "^4.1.1", + "semver": "^7.3.2" + } + }, + "@oclif/config": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.17.0.tgz", + "integrity": "sha512-Lmfuf6ubjQ4ifC/9bz1fSCHc6F6E653oyaRXxg+lgT4+bYf9bk+nqrUpAbrXyABkCqgIBiFr3J4zR/kiFdE1PA==", + "requires": { + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-wsl": "^2.1.1", + "tslib": "^2.0.0" + } + }, + "@oclif/errors": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz", + "integrity": "sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==", + "requires": { + "clean-stack": "^3.0.0", + "fs-extra": "^8.1", + "indent-string": "^4.0.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "@oclif/linewrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", + "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==" + }, + "@oclif/parser": { + "version": "3.8.5", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.5.tgz", + "integrity": "sha512-yojzeEfmSxjjkAvMRj0KzspXlMjCfBzNRPkWw8ZwOSoNWoJn+OCS/m/S+yfV6BvAM4u2lTzX9Y5rCbrFIgkJLg==", + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^2.4.2", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@oclif/plugin-autocomplete": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.3.0.tgz", + "integrity": "sha512-gCuIUCswvoU1BxDDvHSUGxW8rFagiacle8jHqE49+WnuniXD/N8NmJvnzmlNyc8qLE192CnKK+qYyAF+vaFQBg==", + "requires": { + "@oclif/command": "^1.5.13", + "@oclif/config": "^1.13.0", + "chalk": "^4.1.0", + "cli-ux": "^5.2.1", + "debug": "^4.0.0", + "fs-extra": "^9.0.1", + "moment": "^2.22.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "@oclif/plugin-help": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.2.tgz", + "integrity": "sha512-SPZ8U8PBYK0n4srFjCLedk0jWU4QlxgEYLCXIBShJgOwPhTTQknkUlsEwaMIevvCU4iCQZhfMX+D8Pz5GZjFgA==", + "requires": { + "@oclif/command": "^1.5.20", + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.2.2", + "chalk": "^4.1.0", + "indent-string": "^4.0.0", + "lodash.template": "^4.4.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", + "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + } + } + }, + "@oclif/screen": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", + "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==" + }, + "@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==" + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + }, + "archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "requires": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bip32": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-1.0.4.tgz", + "integrity": "sha512-8T21eLWylZETolyqCPgia+MNp+kY37zFr7PTFDTPObHeNi9JlfG4qGIh8WzerIJidtwoK+NsWq2I5i66YfHoIw==", + "requires": { + "bs58check": "^2.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "tiny-secp256k1": "^1.0.0", + "typeforce": "^1.11.5", + "wif": "^2.0.6" + } + }, + "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" + } + }, + "bip44-constants": { + "version": "8.0.103", + "resolved": "https://registry.npmjs.org/bip44-constants/-/bip44-constants-8.0.103.tgz", + "integrity": "sha512-wuGsY9IKUS9GC5Sf/Acb5jLJZI3Z8qsMoQHWldnQyoVUlij4y8e5srh28Iqul1HwK+elPsAYGNYKtYhovjvNxA==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "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.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "catbuffer-typescript": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/catbuffer-typescript/-/catbuffer-typescript-0.1.1.tgz", + "integrity": "sha512-r/z3UKG3YCCdsTEHRXGe3IQxA8OaBRBE31e9du2LOaLStGxYCmxUjfRtJ/DyKfgpS55fJPl3w/VFMnsfwIHmkA==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "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" + } + }, + "clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "requires": { + "escape-string-regexp": "4.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + } + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-progress": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", + "integrity": "sha512-g7rLWfhAo/7pF+a/STFH/xPyosaL1zgADhI0OM83hl3c7S43iGvJWEAV2QuDOnQ8i6EMBj/u4+NTd0d5L+4JfA==", + "requires": { + "colors": "^1.1.2", + "string-width": "^4.2.0" + } + }, + "cli-spinners": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" + }, + "cli-ux": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.6.3.tgz", + "integrity": "sha512-/oDU4v8BiDjX2OKcSunGH0iGDiEtj2rZaGyqNuv9IT4CgcSMyVWAMfn0+rEHaOc4n9ka78B0wo1+N1QX89f7mw==", + "requires": { + "@oclif/command": "^1.6.0", + "@oclif/errors": "^1.2.1", + "@oclif/linewrap": "^1.0.0", + "@oclif/screen": "^1.0.3", + "ansi-escapes": "^4.3.0", + "ansi-styles": "^4.2.0", + "cardinal": "^2.1.1", + "chalk": "^4.1.0", + "clean-stack": "^3.0.0", + "cli-progress": "^3.4.0", + "extract-stack": "^2.0.0", + "fs-extra": "^8.1", + "hyperlinker": "^1.0.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "js-yaml": "^3.13.1", + "lodash": "^4.17.11", + "natural-orderby": "^2.0.1", + "object-treeify": "^1.1.4", + "password-prompt": "^1.1.2", + "semver": "^7.3.2", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "supports-color": "^8.1.0", + "supports-hyperlinks": "^2.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, + "crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "requires": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + } + }, + "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" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extract-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz", + "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==" + }, + "fast-glob": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fecha": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + }, + "figlet": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", + "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "futoin-hkdf": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz", + "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==" + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "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" + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "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" + } + }, + "hyperlinker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", + "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.1.tgz", + "integrity": "sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.3.0", + "run-async": "^2.4.0", + "rxjs": "^6.6.6", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "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-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "logform": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "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" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "merkletreejs": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.22.tgz", + "integrity": "sha512-MYWF5KoCkXcMkFtuB4O40k4yYxmhwb1TiaLvJaj1L5w4LQ66E2sukeslfJjGmaGqWHP4oMK06lgGZgODHxU3bw==", + "requires": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^3.1.9-1", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "dependencies": { + "crypto-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", + "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + } + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "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.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "natural-orderby": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", + "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-treeify": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", + "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "password-prompt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", + "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", + "requires": { + "ansi-escapes": "^3.1.0", + "cross-spawn": "^6.0.5" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "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==" + }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "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" + } + }, + "readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "requires": { + "esprima": "~4.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "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" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "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" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "requires": { + "is-hex-prefixed": "1.0.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" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "symbol-hd-wallets": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/symbol-hd-wallets/-/symbol-hd-wallets-0.14.1.tgz", + "integrity": "sha512-jMYbVHlGtB9IiufME4nGDKEvYXz7e6YfBK0eulGhetMH/0TZ+qIomCmNaMU2EfJEeywo0Kb6TIMIN4AEq9ObBA==", + "requires": { + "bip32": "^1.0.4", + "bip39": "^3.0.2", + "bip44-constants": "^8.0.5", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "crypto-js": "^4.0.0", + "js-sha3": "^0.8.0", + "tiny-secp256k1": "^1.1.3", + "tweetnacl": "^1.0.3" + } + }, + "symbol-openapi-typescript-fetch-client": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/symbol-openapi-typescript-fetch-client/-/symbol-openapi-typescript-fetch-client-0.11.2.tgz", + "integrity": "sha512-A1MAN8/UWlaCEibBf6zxkduZwDNSvWwLPp6JB0GeYI/FAOrw/9nLyuS/NJQ3siGAUclnuejH1wG7KdUg0/4RSw==" + }, + "symbol-sdk": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-sdk/-/symbol-sdk-1.0.1.tgz", + "integrity": "sha512-G4sdGBfggTSqKs9XchMQAtOfl80Z2eARafxZnzje5qxzfUSQUCFYdBP7IJiA2PDoeyfXJJpzWWTlgq9EzvKm1A==", + "requires": { + "@js-joda/core": "^3.2.0", + "bluebird": "^3.7.2", + "catbuffer-typescript": "0.1.1", + "crypto-js": "^4.0.0", + "diff": "^4.0.2", + "futoin-hkdf": "^1.3.2", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "long": "^4.0.0", + "merkletreejs": "^0.2.9", + "minimist": "^1.2.5", + "node-fetch": "^2.6.0", + "ripemd160": "^2.0.2", + "rxjs": "^6.6.3", + "rxjs-compat": "^6.6.3", + "symbol-openapi-typescript-fetch-client": "0.11.2", + "tweetnacl": "^1.0.3", + "utf8": "^2.1.2", + "ws": "^7.3.1" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tiny-secp256k1": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz", + "integrity": "sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==", + "requires": { + "bindings": "^1.3.0", + "bn.js": "^4.11.8", + "create-hmac": "^1.1.7", + "elliptic": "^6.4.0", + "nan": "^2.13.2" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "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" + } + }, + "treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" + }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + }, + "typeforce": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", + "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" + }, + "underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, + "web3-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.4.0.tgz", + "integrity": "sha512-b8mEhwh/J928Xk+SQFjtqrR2EGPhpknWLcIt9aCpVPVRXiqjUGo/kpOHKz0azu9c6/onEJ9tWXZt0cVjmH0N5Q==", + "requires": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.12.1", + "utf8": "3.0.0" + }, + "dependencies": { + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } + }, + "wif": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", + "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", + "requires": { + "bs58check": "<3.0.0" + } + }, + "winston": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "requires": { + "@dabh/diagnostics": "^2.0.2", + "async": "^3.1.0", + "is-stream": "^2.0.0", + "logform": "^2.2.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" + } + }, + "winston-transport": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "requires": { + "readable-stream": "^2.3.7", + "triple-beam": "^1.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", + "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==", + "requires": {} + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "requires": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "requires": { + "xhr-request": "^1.1.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + } + } + } +} diff --git a/packages/bootstrap-cli/package.json b/packages/bootstrap-cli/package.json new file mode 100644 index 000000000..2cc27ac16 --- /dev/null +++ b/packages/bootstrap-cli/package.json @@ -0,0 +1,71 @@ +{ + "name": "symbol-bootstrap", + "version": "1.1.0-alpha.0", + "description": "Symbol CLI tool that allows you creating, configuring and running Symbol's simple node networks or nodes to be sync with existing networks.", + "bin": { + "symbol-bootstrap": "bin/run" + }, + "homepage": "https://github.com/symbol/symbol-bootstrap/packages/tree/main/bootstrap-cli", + "bugs": "https://github.com/symbol/symbol-bootstrap/issues", + "scripts": { + "doc": "shx mkdir -p ts-docs && typedoc --out \"ts-docs\" src && touch ./ts-docs/.nojekyll", + "clean": "npx shx rm -rf ./lib", + "purge": "npx shx rm -rf lib coverage node_modules target .nyc_output logs.log ts-docs", + "lint": "eslint --cache src/ test/ --ext .ts", + "lint:fix": "eslint src/ test/ --ext .ts --fix", + "prettier": "prettier --write ./src ./test", + "style:fix": "npm run create-index-files && npm run prettier && npm run lint:fix && npm run oclif-doc", + "create-index-files": "cti create ./src -b -n -e commands", + "postpack": "npx shx rm -f oclif.manifest.json", + "posttest": "eslint src/ test/ --ext .ts", + "oclif-doc": "oclif-dev manifest && oclif-dev readme --multi", + "watch": "tsc -p tsconfig.build.json --watch", + "compile": "tsc -p tsconfig.build.json", + "build": "npx shx rm -rf lib && npm run compile", + "prepack": "npx shx rm -rf lib && npm run compile && npm run oclif-doc", + "test": "nyc --reporter=lcov --extension .ts mocha -r ts-node/register --timeout 900000 --forbid-only \"test/**/*.test.ts\"", + "e2e": "nyc --reporter=lcov --extension .ts mocha -r ts-node/register --timeout 900000 --forbid-only \"test/**/*.e2e.ts\"", + "version": "echo $npm_package_version", + "install-cli": "npm pack && npm i -g" + }, + "engines": { + "node": ">=12.0.0" + }, + "files": [ + "/bin", + "/lib", + "/npm-shrinkwrap.json", + "/oclif.manifest.json" + ], + "oclif": { + "commands": "./lib/commands", + "bin": "symbol-bootstrap", + "plugins": [ + "@oclif/plugin-autocomplete", + "@oclif/plugin-help" + ] + }, + "keywords": [], + "author": "Fernando Boucquez ", + "license": "Apache-2.0", + "mocha": { + "timeout": 40000 + }, + "types": "lib/index.d.ts", + "dependencies": { + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@oclif/plugin-autocomplete": "^0.3.0", + "@oclif/plugin-help": "^3.2.2", + "archiver": "^5.3.0", + "figlet": "^1.5.0", + "inquirer": "^8.1.1", + "lodash": "^4.17.21", + "symbol-bootstrap-core": "^1.1.0-alpha.0", + "symbol-hd-wallets": "^0.14.1-alpha-202103052158", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "winston": "^3.3.3" + }, + "gitHead": "b24acdda47ff73f56412c42b39f52dbf6d37686d" +} diff --git a/packages/bootstrap-cli/src/commands/clean.ts b/packages/bootstrap-cli/src/commands/clean.ts new file mode 100644 index 000000000..d67f8caae --- /dev/null +++ b/packages/bootstrap-cli/src/commands/clean.ts @@ -0,0 +1,37 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command } from '@oclif/command'; +import { BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; + +export default class Clean extends Command { + static description = 'It removes the target folder deleting the generated configuration and data'; + + static examples = [`$ symbol-bootstrap clean`]; + + static flags = { + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, + }; + + public async run(): Promise { + const { flags } = this.parse(Clean); + BootstrapCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.System, BootstrapUtils.defaultWorkingDir); + BootstrapUtils.deleteFolder(logger, flags.target); + } +} diff --git a/packages/bootstrap-cli/src/commands/compose.ts b/packages/bootstrap-cli/src/commands/compose.ts new file mode 100644 index 000000000..1756846e3 --- /dev/null +++ b/packages/bootstrap-cli/src/commands/compose.ts @@ -0,0 +1,64 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command, flags } from '@oclif/command'; +import { IOptionFlag } from '@oclif/command/lib/flags'; +import { IBooleanFlag } from '@oclif/parser/lib/flags'; +import { BootstrapService, BootstrapUtils, ComposeService, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; + +export default class Compose extends Command { + static description = 'It generates the `docker-compose.yml` file from the configured network.'; + + static examples = [`$ symbol-bootstrap compose`]; + + static flags: { + help: IBooleanFlag; + password: IOptionFlag; + noPassword: IBooleanFlag; + upgrade: IBooleanFlag; + user: IOptionFlag; + target: IOptionFlag; + } = { + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, + password: BootstrapCommandUtils.passwordFlag, + noPassword: BootstrapCommandUtils.noPasswordFlag, + upgrade: flags.boolean({ + description: 'It regenerates the docker compose and utility files from the /docker folder', + default: ComposeService.defaultParams.upgrade, + }), + user: flags.string({ + char: 'u', + description: `User used to run the services in the docker-compose.yml file. "${BootstrapUtils.CURRENT_USER}" means the current user.`, + default: 'current', + }), + }; + + public async run(): Promise { + const { flags } = this.parse(Compose); + const logger = LoggerFactory.getLogger(LogType.System, BootstrapUtils.defaultWorkingDir); + BootstrapCommandUtils.showBanner(); + flags.password = await BootstrapCommandUtils.resolvePassword( + logger, + flags.password, + flags.noPassword, + BootstrapCommandUtils.passwordPromptDefaultMessage, + true, + ); + await new BootstrapService(logger).compose(flags); + } +} diff --git a/packages/bootstrap-cli/src/commands/config.ts b/packages/bootstrap-cli/src/commands/config.ts new file mode 100644 index 000000000..bb6e0e7fa --- /dev/null +++ b/packages/bootstrap-cli/src/commands/config.ts @@ -0,0 +1,99 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command, flags } from '@oclif/command'; +import { IOptionFlag } from '@oclif/command/lib/flags'; +import { IBooleanFlag } from '@oclif/parser/lib/flags'; +import { BootstrapService, BootstrapUtils, ConfigService, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { BootstrapAccountResolver } from '../service/BootstrapAccountResolver'; +import { BootstrapCommandUtils } from '../service/BootstrapCommandUtils'; + +export default class Config extends Command { + static description = 'Command used to set up the configuration files and the nemesis block for the current network'; + + static examples = [ + `$ symbol-bootstrap config -p dualCurrency -a demo`, + `$ symbol-bootstrap config -p testnet -a dual --password 1234`, + `$ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap config -p testnet -a dual`, + ]; + + static flags: { + help: IBooleanFlag; + password: IOptionFlag; + noPassword: IBooleanFlag; + upgrade: IBooleanFlag; + user: IOptionFlag; + preset: IOptionFlag; + assembly: IOptionFlag; + customPreset: IOptionFlag; + reset: IBooleanFlag; + report: IBooleanFlag; + target: IOptionFlag; + } = { + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, + password: BootstrapCommandUtils.passwordFlag, + noPassword: BootstrapCommandUtils.noPasswordFlag, + preset: flags.string({ + char: 'p', + description: `The network preset. It can be provided via custom preset or cli parameter. ${'If not provided, the value is resolved from the target/preset.yml file.'}`, + }), + assembly: flags.string({ + char: 'a', + description: `The assembly that define the node(s) layout. It can be provided via custom preset or cli parameter. ${'If not provided, the value is resolved from the target/preset.yml file.'}`, + }), + customPreset: flags.string({ + char: 'c', + description: `External preset file. Values in this file will override the provided presets.`, + }), + reset: flags.boolean({ + char: 'r', + description: 'It resets the configuration generating a new one.', + default: ConfigService.defaultParams.reset, + }), + + upgrade: flags.boolean({ + description: `It regenerates the configuration reusing the previous keys. Use this flag when upgrading the version of bootstrap to keep your node up to date without dropping the local data. Backup the target folder before upgrading.`, + default: ConfigService.defaultParams.reset, + }), + + report: flags.boolean({ + description: 'It generates reStructuredText (.rst) reports describing the configuration of each node.', + default: ConfigService.defaultParams.report, + }), + + user: flags.string({ + char: 'u', + description: `User used to run docker images when creating configuration files like certificates or nemesis block. "${BootstrapUtils.CURRENT_USER}" means the current user.`, + default: BootstrapUtils.CURRENT_USER, + }), + }; + + public async run(): Promise { + const { flags } = this.parse(Config); + const workingDir = BootstrapUtils.defaultWorkingDir; + const logger = LoggerFactory.getLogger(LogType.System, workingDir); + BootstrapCommandUtils.showBanner(); + flags.password = await BootstrapCommandUtils.resolvePassword( + logger, + flags.password, + flags.noPassword, + BootstrapCommandUtils.passwordPromptDefaultMessage, + true, + ); + await new BootstrapService(logger).config({ ...flags, workingDir, accountResolver: new BootstrapAccountResolver(logger) }); + } +} diff --git a/src/commands/decrypt.ts b/packages/bootstrap-cli/src/commands/decrypt.ts similarity index 89% rename from src/commands/decrypt.ts rename to packages/bootstrap-cli/src/commands/decrypt.ts index c2fcb51e9..2fbd94436 100644 --- a/src/commands/decrypt.ts +++ b/packages/bootstrap-cli/src/commands/decrypt.ts @@ -17,12 +17,8 @@ import { Command, flags } from '@oclif/command'; import { existsSync } from 'fs'; import { dirname } from 'path'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { BootstrapUtils, KnownError } from '../service'; -import { CommandUtils } from '../service/CommandUtils'; -const logger: Logger = LoggerFactory.getLogger(LogType.System); +import { BootstrapUtils, KnownError, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; export default class Decrypt extends Command { static description = `It decrypts a yml file using the provided password. The source file can be a custom preset file, a preset.yml file or an addresses.yml. @@ -57,7 +53,7 @@ $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap decrypt --source target/address ]; static flags = { - help: CommandUtils.helpFlag, + help: BootstrapCommandUtils.helpFlag, source: flags.string({ description: `The source encrypted yml file to be decrypted.`, required: true, @@ -66,7 +62,7 @@ $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap decrypt --source target/address description: `The destination decrypted file to create. The destination file must not exist.`, required: true, }), - password: CommandUtils.getPasswordFlag( + password: BootstrapCommandUtils.getPasswordFlag( `The password to use to decrypt the source file into the destination file. Bootstrap prompts for a password by default, can be provided in the command line (--password=XXXX) or disabled in the command line (--noPassword).`, ), }; @@ -80,7 +76,9 @@ $ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap decrypt --source target/address if (existsSync(flags.destination)) { throw new KnownError(`Destination file ${flags.destination} already exists!`); } - const password = await CommandUtils.resolvePassword( + const logger = LoggerFactory.getLogger(LogType.ConsoleLog); + const password = await BootstrapCommandUtils.resolvePassword( + logger, flags.password, false, `Enter the password to use to decrypt the source file into the destination file. Keep this password in a secure place!`, diff --git a/src/commands/encrypt.ts b/packages/bootstrap-cli/src/commands/encrypt.ts similarity index 87% rename from src/commands/encrypt.ts rename to packages/bootstrap-cli/src/commands/encrypt.ts index 0baec8d80..c063e2897 100644 --- a/src/commands/encrypt.ts +++ b/packages/bootstrap-cli/src/commands/encrypt.ts @@ -17,13 +17,8 @@ import { Command, flags } from '@oclif/command'; import { existsSync } from 'fs'; import { dirname } from 'path'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { BootstrapUtils, KnownError } from '../service'; -import { CommandUtils } from '../service/CommandUtils'; -import { CryptoUtils } from '../service/CryptoUtils'; -const logger: Logger = LoggerFactory.getLogger(LogType.System); +import { BootstrapUtils, CryptoUtils, KnownError, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; export default class Encrypt extends Command { static description = `It encrypts a yml file using the provided password. The source files would be a custom preset file, a preset.yml file or an addresses.yml. @@ -47,7 +42,7 @@ $ symbol-bootstrap start --password 1234 --preset testnet --assembly dual --cust ]; static flags = { - help: CommandUtils.helpFlag, + help: BootstrapCommandUtils.helpFlag, source: flags.string({ description: `The source plain yml file to be encrypted. If this file is encrypted, the command will raise an error.`, required: true, @@ -56,7 +51,7 @@ $ symbol-bootstrap start --password 1234 --preset testnet --assembly dual --cust description: `The destination encrypted file to create. The destination file must not exist.`, required: true, }), - password: CommandUtils.getPasswordFlag( + password: BootstrapCommandUtils.getPasswordFlag( `The password to use to encrypt the source file into the destination file. Bootstrap prompts for a password by default, can be provided in the command line (--password=XXXX) or disabled in the command line (--noPassword).`, ), }; @@ -70,7 +65,9 @@ $ symbol-bootstrap start --password 1234 --preset testnet --assembly dual --cust if (existsSync(flags.destination)) { throw new KnownError(`Destination file ${flags.destination} already exists!`); } - const password = await CommandUtils.resolvePassword( + const logger = LoggerFactory.getLogger(LogType.ConsoleLog); + const password = await BootstrapCommandUtils.resolvePassword( + logger, flags.password, false, `Enter the password used to decrypt the source file into the destination file. Keep this password in a secure place!`, diff --git a/packages/bootstrap-cli/src/commands/enrollRewardProgram.ts b/packages/bootstrap-cli/src/commands/enrollRewardProgram.ts new file mode 100644 index 000000000..1d0ca4d12 --- /dev/null +++ b/packages/bootstrap-cli/src/commands/enrollRewardProgram.ts @@ -0,0 +1,53 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command } from '@oclif/command'; +import { BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils, RewardProgramService } from '../service'; + +export default class EnrollRewardProgram extends Command { + static description = `It enrols the nodes in the rewards program by announcing the enroll transaction to the registration address. You can also use this command to update the program registration when you change the agent keys (changing the agent-ca-csr) or server host. + +Currently, the only program that can be enrolled post-launch is 'SuperNode'.`; + + static examples = [ + `$ symbol-bootstrap enrollRewardProgram`, + `$ symbol-bootstrap enrollRewardProgram --noPassword`, + `$ symbol-bootstrap enrollRewardProgram --useKnownRestGateways`, + `$ symbol-bootstrap enrollRewardProgram --password 1234 --url http://external-rest:3000`, + `$ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap enrollRewardProgram --url http://external-rest:3000`, + ]; + + static flags = { + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, + ...BootstrapCommandUtils.announceFlags, + }; + + public async run(): Promise { + const { flags } = this.parse(EnrollRewardProgram); + BootstrapCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.System, BootstrapUtils.defaultWorkingDir); + flags.password = await BootstrapCommandUtils.resolvePassword( + logger, + flags.password, + flags.noPassword, + BootstrapCommandUtils.passwordPromptDefaultMessage, + true, + ); + await new RewardProgramService(logger, flags).enroll(); + } +} diff --git a/packages/bootstrap-cli/src/commands/healthCheck.ts b/packages/bootstrap-cli/src/commands/healthCheck.ts new file mode 100644 index 000000000..681b42491 --- /dev/null +++ b/packages/bootstrap-cli/src/commands/healthCheck.ts @@ -0,0 +1,45 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command } from '@oclif/command'; +import { BootstrapService, BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; + +export default class HealthCheck extends Command { + static description = `It checks if the services created with docker compose are up and running. + +This command checks: +- Whether the docker containers are running. +- Whether the services' exposed ports are listening. +- Whether the rest gateways' /node/health are OK. + +The health check process handles 'repeat' and custom 'openPort' services. + `; + + static examples = [`$ symbol-bootstrap healthCheck`]; + + static flags = { + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, + }; + + public async run(): Promise { + const { flags } = this.parse(HealthCheck); + BootstrapCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.System, BootstrapUtils.defaultWorkingDir); + await new BootstrapService(logger).healthCheck(flags); + } +} diff --git a/packages/bootstrap-cli/src/commands/link.ts b/packages/bootstrap-cli/src/commands/link.ts new file mode 100644 index 000000000..3ae66f8a3 --- /dev/null +++ b/packages/bootstrap-cli/src/commands/link.ts @@ -0,0 +1,49 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command, flags } from '@oclif/command'; +import { LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils, LinkService } from '../service'; + +export default class Link extends Command { + static description = `It announces VRF and Voting Link transactions to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network.`; + + static examples = [`$ symbol-bootstrap link`, `$ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap link --unlink --useKnownRestGateways`]; + + static flags = { + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, + unlink: flags.boolean({ + description: 'Perform "Unlink" transactions unlinking the voting and VRF keys from the node signer account', + default: LinkService.defaultParams.unlink, + }), + ...BootstrapCommandUtils.announceFlags, + }; + + public async run(): Promise { + const { flags } = this.parse(Link); + BootstrapCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.ConsoleLog); + flags.password = await BootstrapCommandUtils.resolvePassword( + logger, + flags.password, + flags.noPassword, + BootstrapCommandUtils.passwordPromptDefaultMessage, + true, + ); + await new LinkService(logger, flags).run(); + } +} diff --git a/packages/bootstrap-cli/src/commands/pack.ts b/packages/bootstrap-cli/src/commands/pack.ts new file mode 100644 index 000000000..0f2c42fc1 --- /dev/null +++ b/packages/bootstrap-cli/src/commands/pack.ts @@ -0,0 +1,123 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command, flags } from '@oclif/command'; +import { existsSync } from 'fs'; +import { prompt } from 'inquirer'; +import { dirname, join } from 'path'; +import { BootstrapService, BootstrapUtils, CryptoUtils, LoggerFactory, LogType, ZipItem, ZipUtils } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; +import { BootstrapAccountResolver } from '../service/BootstrapAccountResolver'; +import Clean from './clean'; +import Compose from './compose'; +import Config from './config'; + +export default class Pack extends Command { + static description = 'It configures and packages your node into a zip file that can be uploaded to the final node machine.'; + + static examples = [ + `$ symbol-bootstrap pack`, + `$ symbol-bootstrap pack -c custom-preset.yml`, + `$ symbol-bootstrap pack -p testnet -a dual -c custom-preset.yml`, + `$ symbol-bootstrap pack -p mainnet -a dual --password 1234 -c custom-preset.yml`, + `$ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap pack -p mainnet -a dual -c custom-preset.yml`, + ]; + + static flags = { + ...Compose.flags, + ...Clean.flags, + ...Config.flags, + ready: flags.boolean({ + description: 'If --ready is provided, the command will not ask offline confirmation.', + }), + }; + + public async run(): Promise { + const { flags } = this.parse(Pack); + BootstrapCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.Console); + const preset = flags.preset; + const assembly = flags.assembly; + const targetZip = join(dirname(flags.target), `${preset}-${assembly || 'default'}-node.zip`); + + if (existsSync(targetZip)) { + throw new Error( + `The target zip file ${targetZip} already exist. Do you want to delete it before repackaging your target folder?`, + ); + } + logger.info(''); + logger.info(''); + if ( + !flags.ready && + !( + await prompt([ + { + name: 'offlineNow', + message: `Symbol Bootstrap is about to start working with sensitive information (certificates and voting file generation) so it is highly recommended that you disconnect from the network before continuing. Say YES if you are offline or if you don't care.`, + type: 'confirm', + default: true, + }, + ]) + ).offlineNow + ) { + logger.info('Come back when you are offline...'); + return; + } + + flags.password = await BootstrapCommandUtils.resolvePassword( + logger, + flags.password, + flags.noPassword, + BootstrapCommandUtils.passwordPromptDefaultMessage, + true, + ); + const workingDir = BootstrapUtils.defaultWorkingDir; + const service = await new BootstrapService(logger); + const configOnlyCustomPresetFileName = 'config-only-custom-preset.yml'; + const configResult = await service.config({ ...flags, accountResolver: new BootstrapAccountResolver(logger), workingDir }); + await service.compose(flags, configResult.presetData); + + const noPrivateKeyTempFile = 'custom-preset-temp.temp'; + + if (flags.customPreset) { + await BootstrapUtils.writeYaml( + noPrivateKeyTempFile, + CryptoUtils.removePrivateKeys(await BootstrapUtils.loadYaml(flags.customPreset, flags.password)), + flags.password, + ); + } else { + await BootstrapUtils.writeYaml(noPrivateKeyTempFile, {}, flags.password); + } + const zipItems: ZipItem[] = [ + { + from: flags.target, + to: 'target', + directory: true, + }, + { + from: noPrivateKeyTempFile, + to: configOnlyCustomPresetFileName, + directory: false, + }, + ]; + + await new ZipUtils(logger).zip(targetZip, zipItems); + await BootstrapUtils.deleteFile(noPrivateKeyTempFile); + logger.info(''); + logger.info(`Zip file ${targetZip} has been created. You can unzip it in your node's machine and run:`); + logger.info(`$ symbol-bootstrap start`); + } +} diff --git a/packages/bootstrap-cli/src/commands/report.ts b/packages/bootstrap-cli/src/commands/report.ts new file mode 100644 index 000000000..f8e972923 --- /dev/null +++ b/packages/bootstrap-cli/src/commands/report.ts @@ -0,0 +1,38 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command } from '@oclif/command'; +import { BootstrapService, BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; + +export default class Clean extends Command { + static description = 'it generates reStructuredText (.rst) reports describing the configuration of each node.'; + + static examples = [`$ symbol-bootstrap report`]; + + static flags = { + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, + }; + + public async run(): Promise { + const workingDir = BootstrapUtils.defaultWorkingDir; + const { flags } = this.parse(Clean); + BootstrapCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.System, workingDir); + await new BootstrapService(logger).report(flags); + } +} diff --git a/packages/bootstrap-cli/src/commands/resetData.ts b/packages/bootstrap-cli/src/commands/resetData.ts new file mode 100644 index 000000000..2f1442cf6 --- /dev/null +++ b/packages/bootstrap-cli/src/commands/resetData.ts @@ -0,0 +1,38 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command } from '@oclif/command'; +import { BootstrapService, BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; + +export default class ResetData extends Command { + static description = 'It removes the data keeping the generated configuration, certificates, keys and block 1.'; + + static examples = [`$ symbol-bootstrap resetData`]; + + static flags = { + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, + }; + + public async run(): Promise { + const workingDir = BootstrapUtils.defaultWorkingDir; + const { flags } = this.parse(ResetData); + BootstrapCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.System, workingDir); + await new BootstrapService(logger).resetData(flags); + } +} diff --git a/src/commands/run.ts b/packages/bootstrap-cli/src/commands/run.ts similarity index 83% rename from src/commands/run.ts rename to packages/bootstrap-cli/src/commands/run.ts index 0ef870fcc..1868616cc 100644 --- a/src/commands/run.ts +++ b/packages/bootstrap-cli/src/commands/run.ts @@ -15,8 +15,8 @@ */ import { Command, flags } from '@oclif/command'; -import { BootstrapService, BootstrapUtils, RunService } from '../service'; -import { CommandUtils } from '../service/CommandUtils'; +import { BootstrapService, BootstrapUtils, LoggerFactory, LogType, RunService } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; import HealthCheck from './healthCheck'; export default class Run extends Command { @@ -26,8 +26,8 @@ export default class Run extends Command { static examples = [`$ symbol-bootstrap run`]; static flags = { - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, detached: flags.boolean({ char: 'd', description: @@ -64,8 +64,10 @@ export default class Run extends Command { }; public run(): Promise { + const workingDir = BootstrapUtils.defaultWorkingDir; const { flags } = this.parse(Run); - BootstrapUtils.showBanner(); - return new BootstrapService(this.config.root).run(flags); + BootstrapCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.System, workingDir); + return new BootstrapService(logger).run(flags); } } diff --git a/packages/bootstrap-cli/src/commands/start.ts b/packages/bootstrap-cli/src/commands/start.ts new file mode 100644 index 000000000..840b0f077 --- /dev/null +++ b/packages/bootstrap-cli/src/commands/start.ts @@ -0,0 +1,53 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command } from '@oclif/command'; +import { BootstrapService, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; +import { BootstrapAccountResolver } from '../service/BootstrapAccountResolver'; +import Clean from './clean'; +import Compose from './compose'; +import Config from './config'; +import Run from './run'; + +export default class Start extends Command { + static description = 'Single command that aggregates config, compose and run in one line!'; + + static examples = [ + `$ symbol-bootstrap start -p singleCurrency -a multinode`, + `$ symbol-bootstrap start -p dualCurrency -a multinode`, + `$ symbol-bootstrap start -p testnet -a dual`, + `$ symbol-bootstrap start -p testnet -a dual --password 1234`, + `$ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap start -p testnet -a dual`, + ]; + + static flags = { ...Compose.flags, ...Run.flags, ...Clean.flags, ...Config.flags }; + + public async run(): Promise { + const { flags } = this.parse(Start); + BootstrapCommandUtils.showBanner(); + const workingDir = '.'; + const logger = LoggerFactory.getLogger(LogType.System, workingDir); + flags.password = await BootstrapCommandUtils.resolvePassword( + logger, + flags.password, + flags.noPassword, + BootstrapCommandUtils.passwordPromptDefaultMessage, + true, + ); + await new BootstrapService(logger).start({ ...flags, accountResolver: new BootstrapAccountResolver(logger), workingDir }); + } +} diff --git a/packages/bootstrap-cli/src/commands/stop.ts b/packages/bootstrap-cli/src/commands/stop.ts new file mode 100644 index 000000000..6a47e2551 --- /dev/null +++ b/packages/bootstrap-cli/src/commands/stop.ts @@ -0,0 +1,38 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command } from '@oclif/command'; +import { BootstrapUtils, LoggerFactory, LogType, RunService } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; + +export default class Stop extends Command { + static description = + 'It stops the docker-compose network if running (symbol-bootstrap started with --detached). This is just a wrapper for the `docker-compose down` bash call.'; + static examples = [`$ symbol-bootstrap stop`]; + + static flags = { + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, + }; + + public run(): Promise { + const { flags } = this.parse(Stop); + BootstrapCommandUtils.showBanner(); + const workingDir = BootstrapUtils.defaultWorkingDir; + const logger = LoggerFactory.getLogger(LogType.System, workingDir); + return new RunService(logger, flags).stop(); + } +} diff --git a/src/commands/updateVotingKeys.ts b/packages/bootstrap-cli/src/commands/updateVotingKeys.ts similarity index 78% rename from src/commands/updateVotingKeys.ts rename to packages/bootstrap-cli/src/commands/updateVotingKeys.ts index a7d402edc..143bc94b0 100644 --- a/src/commands/updateVotingKeys.ts +++ b/packages/bootstrap-cli/src/commands/updateVotingKeys.ts @@ -15,11 +15,10 @@ */ import { Command, flags } from '@oclif/command'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { BootstrapUtils, CommandUtils, ConfigLoader, CryptoUtils, RemoteNodeService, VotingService } from '../service'; -const logger: Logger = LoggerFactory.getLogger(LogType.System); +import { IOptionFlag } from '@oclif/command/lib/flags'; +import { IBooleanFlag } from '@oclif/parser/lib/flags'; +import { BootstrapUtils, ConfigLoader, CryptoUtils, LoggerFactory, LogType, RemoteNodeService, VotingService } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; export default class UpdateVotingKeys extends Command { static description = `It updates the voting files containing the voting keys when required. @@ -34,9 +33,14 @@ When a new voting file is created, Bootstrap will advise running the \`link\` co static examples = [`$ symbol-bootstrap updateVotingKeys`]; - static flags = { - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, + static flags: { + help: IBooleanFlag; + target: IOptionFlag; + user: IOptionFlag; + finalizationEpoch: IOptionFlag; + } = { + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, user: flags.string({ char: 'u', description: `User used to run docker images when creating the the voting key files. "${BootstrapUtils.CURRENT_USER}" means the current user.`, @@ -49,16 +53,18 @@ When a new voting file is created, Bootstrap will advise running the \`link\` co public async run(): Promise { const { flags } = this.parse(UpdateVotingKeys); - BootstrapUtils.showBanner(); + BootstrapCommandUtils.showBanner(); const password = false; const target = flags.target; - const configLoader = new ConfigLoader(); + const logger = LoggerFactory.getLogger(LogType.ConsoleLog); + const configLoader = new ConfigLoader(logger); const addressesLocation = configLoader.getGeneratedAddressLocation(target); const presetData = configLoader.loadExistingPresetData(target, password); const addresses = configLoader.loadExistingAddresses(target, password); const privateKeySecurityMode = CryptoUtils.getPrivateKeySecurityMode(presetData.privateKeySecurityMode); - const finalizationEpoch = flags.finalizationEpoch || (await new RemoteNodeService().resolveCurrentFinalizationEpoch(presetData)); + const finalizationEpoch = + flags.finalizationEpoch || (await new RemoteNodeService(logger).resolveCurrentFinalizationEpoch(presetData, false)); const votingKeyUpgrade = ( await Promise.all( @@ -67,7 +73,7 @@ When a new voting file is created, Bootstrap will advise running the \`link\` co if (!nodeAccount) { throw new Error(`There is not node in addresses at index ${index}`); } - return new VotingService({ + return new VotingService(logger, { target, user: flags.user, }).run(presetData, nodeAccount, nodePreset, finalizationEpoch, true, false); diff --git a/packages/bootstrap-cli/src/commands/verify.ts b/packages/bootstrap-cli/src/commands/verify.ts new file mode 100644 index 000000000..6e1cf2904 --- /dev/null +++ b/packages/bootstrap-cli/src/commands/verify.ts @@ -0,0 +1,38 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command } from '@oclif/command'; +import { BootstrapUtils, LoggerFactory, LogType, VerifyService } from 'symbol-bootstrap-core'; +import { BootstrapCommandUtils } from '../service'; + +export default class Verify extends Command { + static description = + 'It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue.'; + static examples = [`$ symbol-bootstrap verify`]; + + static flags = { + help: BootstrapCommandUtils.helpFlag, + }; + + public async run(): Promise { + BootstrapCommandUtils.showBanner(); + const workingDir = BootstrapUtils.defaultWorkingDir; + const logger = LoggerFactory.getLogger(LogType.System, workingDir); + const service = new VerifyService(logger); + const report = await service.createReport(); + service.logReport(report, logger); + } +} diff --git a/src/commands/wizard.ts b/packages/bootstrap-cli/src/commands/wizard.ts similarity index 81% rename from src/commands/wizard.ts rename to packages/bootstrap-cli/src/commands/wizard.ts index 036259b2a..7fad0a3ad 100644 --- a/src/commands/wizard.ts +++ b/packages/bootstrap-cli/src/commands/wizard.ts @@ -18,34 +18,48 @@ import { Command, flags } from '@oclif/command'; import { IOptionFlag } from '@oclif/command/lib/flags'; import { existsSync } from 'fs'; import { prompt } from 'inquirer'; +import { + Assembly, + BootstrapService, + BootstrapUtils, + ConfigLoader, + ConfigService, + CustomPreset, + KeyName, + LoggerFactory, + LogType, + Preset, + PrivateKeySecurityMode, + RewardProgram, +} from 'symbol-bootstrap-core'; import { ExtendedKey, MnemonicPassPhrase, Network as SeedNetwork, Wallet } from 'symbol-hd-wallets'; import { Account, NetworkType, PublicAccount } from 'symbol-sdk'; -import { CustomPreset, PrivateKeySecurityMode } from '../model'; -import { BootstrapService, BootstrapUtils, CommandUtils, ConfigLoader, ConfigService, KeyName, Preset, RewardProgram } from '../service'; - -export const assemblies: Record = { - [Preset.bootstrap]: [ - { value: '', description: 'Default: A network with 2 peers, a api, a broker, a mongo db, and a Rest Gateway' }, - { value: 'full', description: 'Full: A complete network with a private Explorer, Faucet and Wallet' }, - { value: 'light', description: 'Light: A light network with a dual, a mongo dn and a rest gateway' }, - ], - [Preset.mainnet]: [ - { value: 'dual', description: 'Dual Node' }, - { value: 'peer', description: 'Peer Node' }, - { value: 'api', description: 'Api Node' }, - ], - [Preset.testnet]: [ - { value: 'dual', description: 'Dual Node' }, - { value: 'peer', description: 'Peer Node' }, - { value: 'api', description: 'Api Node' }, - ], +import { BootstrapCommandUtils } from '../service'; + +export const assembliesDescriptions: Record = { + [Assembly.dual]: 'Dual Node', + [Assembly.peer]: 'Peer Node', + [Assembly.api]: 'Api Node', + [Assembly.demo]: 'Demo Node', + [Assembly.multinode]: 'Multinode Node. A docker compose that includes one api, one rest and two peers.', }; + export enum Network { mainnet = 'mainnet', testnet = 'testnet', - privateNetwork = 'privateNetwork', + singleCurrencyPrivateNetwork = 'singleCurrencyPrivateNetwork', + dualCurrencyPrivateNetwork = 'dualCurrencyPrivateNetwork', + customNetwork = 'customNetwork', } +export const assemblies: Record = { + [Network.mainnet]: [Assembly.dual, Assembly.peer, Assembly.api], + [Network.testnet]: [Assembly.dual, Assembly.peer, Assembly.api, Assembly.demo], + [Network.singleCurrencyPrivateNetwork]: [Assembly.multinode, Assembly.dual, Assembly.peer, Assembly.api, Assembly.demo], + [Network.dualCurrencyPrivateNetwork]: [Assembly.multinode, Assembly.dual, Assembly.peer, Assembly.api, Assembly.demo], + [Network.customNetwork]: [Assembly.dual, Assembly.peer, Assembly.api], +}; + export enum ImportType { PRIVATE_KEYS = 'privateKeys', OPTIN_PAPER_WALLET = 'optinPaperWallet', @@ -69,21 +83,24 @@ export interface ProvidedAccounts { agent?: Account; } -export const networkToPreset: Record = { - [Network.privateNetwork]: Preset.bootstrap, +export const networkToPreset: Record = { + [Network.singleCurrencyPrivateNetwork]: Preset.singleCurrency, + [Network.dualCurrencyPrivateNetwork]: Preset.dualCurrency, [Network.mainnet]: Preset.mainnet, [Network.testnet]: Preset.testnet, + [Network.customNetwork]: 'custom-network-preset.yml', }; + export default class Wizard extends Command { static description = 'An utility command that will help you configuring node!'; static examples = [`$ symbol-bootstrap wizard`]; static flags = { - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, - password: CommandUtils.passwordFlag, - noPassword: CommandUtils.noPasswordFlag, + help: BootstrapCommandUtils.helpFlag, + target: BootstrapCommandUtils.targetFlag, + password: BootstrapCommandUtils.passwordFlag, + noPassword: BootstrapCommandUtils.noPasswordFlag, network: Wizard.getNetworkIdFlag(), customPreset: Wizard.getCustomPresetFile(), ready: flags.boolean({ @@ -108,7 +125,8 @@ export default class Wizard extends Command { ready?: boolean; }, ): Promise { - BootstrapUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.Console); + BootstrapCommandUtils.showBanner(); console.log('Welcome to the Symbol Bootstrap wizard! This command will:'); console.log(' - Guide you through the configuration process.'); console.log(' - Import Paper Wallet seeds.'); @@ -127,22 +145,23 @@ export default class Wizard extends Command { } const network = await Wizard.resolveNetwork(flags.network); - const preset = networkToPreset[network]; - const assembly = await Wizard.resolveAssembly(preset); - if (network == Network.privateNetwork) { + const preset = await Wizard.resolvePreset(network); + const assembly = await Wizard.resolveAssembly(network); + if (network == Network.dualCurrencyPrivateNetwork || network == Network.singleCurrencyPrivateNetwork) { console.log('For a private network, just run: '); console.log(''); - console.log(`$ symbol-bootstrap start -b ${preset}${assembly ? ` -a ${assembly}` : ''}`); + console.log(`$ symbol-bootstrap start -b ${preset} -a ${assembly}`); return; } if (!flags.skipPull) { - const service = await new BootstrapService(); + const service = await new BootstrapService(logger); console.log(); console.log('Pulling catapult tools image before asking to go offline...'); console.log(); ConfigLoader.presetInfoLogged = true; await BootstrapUtils.pullImage( + logger, service.resolveConfigPreset({ ...ConfigService.defaultParams, preset: preset, @@ -176,10 +195,11 @@ export default class Wizard extends Command { ); console.log(`If you don't know what a key is used for, let Symbol Bootstrap generate a new one for you.`); - const password = await CommandUtils.resolvePassword( + const password = await BootstrapCommandUtils.resolvePassword( + logger, flags.password, flags.noPassword, - CommandUtils.passwordPromptDefaultMessage, + BootstrapCommandUtils.passwordPromptDefaultMessage, false, ); @@ -239,25 +259,18 @@ export default class Wizard extends Command { console.log('Remember to delete the plain-custom-preset.yml file after used!!!'); console.log( - `You can edit this file to further customize it. Read more https://github.com/nemtech/symbol-bootstrap/blob/main/docs/presetGuides.md`, + `You can edit this file to further customize it. Read more https://github.com/symbol/symbol-bootstrap/blob/main/docs/presetGuides.md`, ); console.log(); console.log(`Once you have finished the custom preset customization, You can use the 'start' to run the node in this machine:`); console.log(); - console.log( - `$ symbol-bootstrap start -p ${network} -a ${assembly} -c ${customPresetFile} ${ - target !== defaultParams.target ? `-t ${target}` : '' - }`, - ); + const targetParam = target !== defaultParams.target ? `-t ${target}` : ''; + console.log(`$ symbol-bootstrap start -c ${customPresetFile} ${targetParam}`); console.log(); console.log(`Alternatively, to create a zip file that can be deployed in your node machine you can use the 'pack' command:`); console.log(); - console.log( - `$ symbol-bootstrap pack -p ${network} -a ${assembly} -c ${customPresetFile} ${ - target !== defaultParams.target ? `-t ${target}` : '' - }`, - ); + console.log(`$ symbol-bootstrap pack -c ${customPresetFile} ${targetParam}`); console.log(); console.log( `Once the target folder is created, Bootstrap will use the protected and encrypted addresses.yml, and preset.yml in inside the target folder.`, @@ -427,7 +440,7 @@ export default class Wizard extends Command { if (!value) { return true; } - return CommandUtils.isValidPrivateKey(value); + return BootstrapUtils.isValidPrivateKey(value); }, }, ]); @@ -462,7 +475,12 @@ export default class Wizard extends Command { choices: [ { name: 'Mainnet Node', value: Network.mainnet }, { name: 'Testnet Node', value: Network.testnet }, - { name: 'Private Network', value: Network.privateNetwork }, + { name: 'Dual Currency Local Private Network', value: Network.singleCurrencyPrivateNetwork }, + { name: 'Single Currency Local Private Network', value: Network.dualCurrencyPrivateNetwork }, + { + name: `Custom Network Node ('custom-network-preset.yml' file and 'nemesis-seed' folder are required)`, + value: Network.customNetwork, + }, ], }, ]); @@ -471,6 +489,33 @@ export default class Wizard extends Command { return providedNetwork; } + public static async resolvePreset(network: Network): Promise { + if (network === Network.customNetwork) { + console.log( + `Enter the network preset you want to join. If you don't know have the network preset, ask the network admin for the file and nemesis seed. :\n`, + ); + const responses = await prompt([ + { + name: 'networkPresetFile', + message: 'Enter the network a network:', + type: 'input', + validate(input: string): string | boolean { + if (!BootstrapUtils.isYmlFile(input)) { + return `${input} is not a yaml file`; + } + if (!existsSync(input)) { + return `${input} doesn't exist`; + } + return true; + }, + default: networkToPreset[network], + }, + ]); + return responses.networkPresetFile; + } + return networkToPreset[network]; + } + public static async resolvePrivateKeySecurityMode(): Promise { const { mode } = await prompt([ { @@ -480,13 +525,11 @@ export default class Wizard extends Command { default: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, choices: [ { - name: - 'PROMPT_MAIN: Bootstrap may ask for the Main private key when doing certificates upgrades. Other keys are encrypted. Recommended for Supernodes.', + name: 'PROMPT_MAIN: Bootstrap may ask for the Main private key when doing certificates upgrades. Other keys are encrypted. Recommended for Supernodes.', value: PrivateKeySecurityMode.PROMPT_MAIN, }, { - name: - 'PROMPT_MAIN_TRANSPORT: Bootstrap may ask for the Main and Transport private keys when regenerating certificates and agent configuration. Other keys are encrypted. Recommended for regular nodes', + name: 'PROMPT_MAIN_TRANSPORT: Bootstrap may ask for the Main and Transport private keys when regenerating certificates and agent configuration. Other keys are encrypted. Recommended for regular nodes', value: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, }, { name: 'ENCRYPT: All keys are encrypted, only password would be asked', value: PrivateKeySecurityMode.ENCRYPT }, @@ -496,17 +539,17 @@ export default class Wizard extends Command { return mode; } - public static async resolveAssembly(preset: Preset): Promise { + public static async resolveAssembly(network: Network): Promise { console.log('Select the assembly to be created:\n'); const responses = await prompt([ { name: 'assembly', message: 'Select an assembly:', type: 'list', - default: assemblies[preset][0].value, - choices: assemblies[preset].map(({ value, description }) => ({ + default: assemblies[network][0], + choices: assemblies[network].map((value) => ({ value: value, - name: description, + name: assembliesDescriptions[value], })), }, ]); @@ -557,7 +600,7 @@ export default class Wizard extends Command { public static getNetworkIdFlag(): IOptionFlag { return flags.string({ description: 'The node or network you want to create', - options: [Network.mainnet, Network.testnet, Network.privateNetwork], + options: Object.values(Network), }) as IOptionFlag; } @@ -713,9 +756,10 @@ export default class Wizard extends Command { if (input.length > 50) { return `Input (${input.length}) is larger than 50`; } - const valid = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test( - input, - ); + const valid = + /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test( + input, + ); return valid ? true : `It's not a valid IP or hostname`; } diff --git a/packages/bootstrap-cli/src/index.ts b/packages/bootstrap-cli/src/index.ts new file mode 100644 index 000000000..cf368953a --- /dev/null +++ b/packages/bootstrap-cli/src/index.ts @@ -0,0 +1,3 @@ +// created from 'create-ts-index' + +export * from './service'; diff --git a/packages/bootstrap-cli/src/service/BootstrapAccountResolver.ts b/packages/bootstrap-cli/src/service/BootstrapAccountResolver.ts new file mode 100644 index 000000000..c78829783 --- /dev/null +++ b/packages/bootstrap-cli/src/service/BootstrapAccountResolver.ts @@ -0,0 +1,144 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { prompt } from 'inquirer'; +import { AccountResolver, BootstrapUtils, CertificatePair, KeyName, KnownError, Logger } from 'symbol-bootstrap-core'; +import { Account, Address, NetworkType, PublicAccount, SignedTransaction, Transaction } from 'symbol-sdk'; +export class BootstrapAccountResolver implements AccountResolver { + constructor(private readonly logger: Logger) {} + + public async resolveAccount( + networkType: NetworkType, + account: CertificatePair | undefined, + keyName: KeyName, + nodeName: string, + operationDescription: string, + generateErrorMessage: string | undefined, + ): Promise { + if (!account) { + if (generateErrorMessage) { + throw new KnownError(generateErrorMessage); + } + this.logger.info(`Generating ${keyName} account...`); + return Account.generateNewAccount(networkType); + } + + if (!account.privateKey) { + while (true) { + this.logger.info(''); + this.logger.info(`${keyName} private key is required when ${operationDescription}.`); + const address = PublicAccount.createFromPublicKey(account.publicKey, networkType).address.plain(); + const nodeDescription = nodeName === '' ? `of` : `of the Node's '${nodeName}'`; + const responses = await prompt([ + { + name: 'value', + message: `Enter the 64 HEX private key ${nodeDescription} ${keyName} account with Address: ${address} and Public Key: ${account.publicKey}:`, + type: 'password', + mask: '*', + validate: BootstrapUtils.isValidPrivateKey, + }, + ]); + const privateKey = responses.value === '' ? undefined : responses.value.toUpperCase(); + if (!privateKey) { + this.logger.info('Please provide the private key.'); + } else { + const enteredAccount = Account.createFromPrivateKey(privateKey, networkType); + if (enteredAccount.publicKey.toUpperCase() !== account.publicKey.toUpperCase()) { + this.logger.info( + `Invalid private key. Expected address is ${address} but you provided the private key for address ${enteredAccount.address.plain()}.\n`, + ); + this.logger.info(`Please re-enter private key.`); + } else { + account.privateKey = privateKey; + return Account.createFromPrivateKey(privateKey, networkType); + } + } + } + } + return Account.createFromPrivateKey(account.privateKey, networkType); + } + + public async shouldAnnounce( + transaction: Transaction, + signedTransaction: SignedTransaction, + transactionDescription: string, + ): Promise { + return ( + await prompt([ + { + name: 'value', + message: `Do you want to announce ${transactionDescription}?`, + type: 'confirm', + default: true, + }, + ]) + ).value; + } + + public async resolveCosigners(networkType: NetworkType, expectedAddresses: Address[], minApproval: number): Promise { + const providedAccounts: Account[] = []; + const allowedAddresses = [...expectedAddresses]; + while (true) { + this.logger.info(''); + const expectedDescription = allowedAddresses.map((address) => address.plain()).join(', '); + const responses = await prompt([ + { + name: 'privateKey', + message: `Enter the 64 HEX private key of one of the addresses ${expectedDescription}. Already entered ${providedAccounts.length} out of ${minApproval} required cosigners.`, + type: 'password', + validate: BootstrapUtils.isValidPrivateKey, + }, + ]); + const privateKey = responses.privateKey; + if (!privateKey) { + this.logger.info('Please provide the private key....'); + } else { + const account = Account.createFromPrivateKey(privateKey, networkType); + const expectedAddress = allowedAddresses.find((address) => address.equals(account.address)); + if (!expectedAddress) { + this.logger.info(''); + this.logger.info( + `Invalid private key. The entered private key has this ${account.address.plain()} address and it's not one of ${expectedDescription}. \n`, + ); + this.logger.info(`Please re enter private key...`); + } else { + allowedAddresses.splice(allowedAddresses.indexOf(expectedAddress), 1); + providedAccounts.push(account); + if (!allowedAddresses.length) { + this.logger.info('All cosigners have been entered.'); + return providedAccounts; + } + if (providedAccounts.length == minApproval) { + this.logger.info(`Min Approval of ${minApproval} has been reached. Aggregate Complete transaction can be created.`); + return providedAccounts; + } + const responses = await prompt([ + { + name: 'more', + message: `Do you want to enter more cosigners?`, + type: 'confirm', + default: providedAccounts.length < minApproval, + }, + ]); + if (!responses.more) { + return providedAccounts; + } else { + this.logger.info('Please provide an additional private key....'); + } + } + } + } + } +} diff --git a/packages/bootstrap-cli/src/service/BootstrapCommandUtils.ts b/packages/bootstrap-cli/src/service/BootstrapCommandUtils.ts new file mode 100644 index 000000000..12a9f3c20 --- /dev/null +++ b/packages/bootstrap-cli/src/service/BootstrapCommandUtils.ts @@ -0,0 +1,121 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { flags } from '@oclif/command'; +import { IOptionFlag } from '@oclif/command/lib/flags'; +import { IBooleanFlag } from '@oclif/parser/lib/flags'; +import { textSync } from 'figlet'; +import { prompt } from 'inquirer'; +import { BootstrapUtils, Logger } from 'symbol-bootstrap-core'; + +export class BootstrapCommandUtils { + public static passwordPromptDefaultMessage = `Enter the password used to encrypt and decrypt custom presets, addresses.yml, and preset.yml files. When providing a password, private keys will be encrypted. Keep this password in a secure place!`; + public static helpFlag: IBooleanFlag = flags.help({ char: 'h', description: 'It shows the help of this command.' }); + + public static targetFlag: IOptionFlag = flags.string({ + char: 't', + description: 'The target folder where the symbol-bootstrap network is generated', + default: BootstrapUtils.defaultTargetFolder, + }); + + public static passwordFlag: IOptionFlag = BootstrapCommandUtils.getPasswordFlag( + `A password used to encrypt and decrypt private keys in preset files like addresses.yml and preset.yml. Bootstrap prompts for a password by default, can be provided in the command line (--password=XXXX) or disabled in the command line (--noPassword).`, + ); + + public static noPasswordFlag: IBooleanFlag = flags.boolean({ + description: 'When provided, Bootstrap will not use a password, so private keys will be stored in plain text. Use with caution.', + default: false, + }); + + public static announceFlags = { + password: BootstrapCommandUtils.passwordFlag, + noPassword: BootstrapCommandUtils.noPasswordFlag, + url: flags.string({ + char: 'u', + description: 'the network url', + default: 'http://localhost:3000', + }), + useKnownRestGateways: flags.boolean({ + description: + 'Use the best NEM node available when announcing. Otherwise the command will use the node provided by the --url parameter.', + }), + ready: flags.boolean({ + description: 'If --ready is provided, the command will not ask for confirmation when announcing transactions.', + }), + maxFee: flags.integer({ + description: 'the max fee used when announcing (absolute). The node min multiplier will be used if it is not provided.', + }), + customPreset: flags.string({ + char: 'c', + description: `This command uses the encrypted addresses.yml to resolve the main private key. If the main private is only stored in the custom preset, you can provide it using this param. Otherwise, the command may ask for it when required.`, + required: false, + }), + }; + + public static showBanner(): void { + console.log(textSync('symbol-bootstrap', { horizontalLayout: 'fitted' })); + } + + public static getPasswordFlag(description: string): IOptionFlag { + return flags.string({ + description: description, + parse(input: string): string { + const result = !input || BootstrapCommandUtils.isValidPassword(input); + if (result === true) return input; + throw new Error(`--password is invalid, ${result}`); + }, + }); + } + + public static isValidPassword(input: string | undefined): boolean | string { + if (!input || input === '') { + return true; + } + if (input.length >= 4) return true; + return `Password must have at least 4 characters but got ${input.length}`; + } + + public static async resolvePassword( + logger: Logger, + providedPassword: string | undefined, + noPassword: boolean, + message: string, + log: boolean, + ): Promise { + if (!providedPassword) { + if (noPassword) { + if (log) logger.warn(`Password has not been provided (--noPassword)! It's recommended to use one for security!`); + return undefined; + } + const responses = await prompt([ + { + name: 'password', + mask: '*', + message: message, + type: 'password', + validate: BootstrapCommandUtils.isValidPassword, + }, + ]); + if (responses.password === '' || !responses.password) { + if (log) logger.warn(`Password has not been provided (empty text)! It's recommended to use one for security!`); + return undefined; + } + if (log) logger.info(`Password has been provided`); + return responses.password; + } + if (log) logger.info(`Password has been provided`); + return providedPassword; + } +} diff --git a/packages/bootstrap-cli/src/service/LinkService.ts b/packages/bootstrap-cli/src/service/LinkService.ts new file mode 100644 index 000000000..b78470c08 --- /dev/null +++ b/packages/bootstrap-cli/src/service/LinkService.ts @@ -0,0 +1,120 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { prompt } from 'inquirer'; +import { + Addresses, + AnnounceService, + BootstrapUtils, + ConfigLoader, + ConfigPreset, + LinkTransactionGenericFactory, + Logger, + NodeAccount, + RemoteNodeService, + TransactionFactory, +} from 'symbol-bootstrap-core'; +import { AccountInfo, Deadline, Transaction, UInt64 } from 'symbol-sdk'; +import { BootstrapAccountResolver } from './BootstrapAccountResolver'; + +/** + * params necessary to announce link transactions network. + */ +export type LinkParams = { + target: string; + password?: string; + url: string; + maxFee?: number | undefined; + unlink: boolean; + useKnownRestGateways: boolean; + ready?: boolean; + customPreset?: string; + removeOldLinked?: boolean; //TEST ONLY! +}; + +export interface LinkServiceTransactionFactoryParams { + presetData: ConfigPreset; + nodeAccount: NodeAccount; + mainAccountInfo: AccountInfo; + deadline: Deadline; + maxFee: UInt64; + latestFinalizedBlockEpoch?: number; +} + +export class LinkService implements TransactionFactory { + public static readonly defaultParams: LinkParams = { + target: BootstrapUtils.defaultTargetFolder, + useKnownRestGateways: false, + ready: false, + url: 'http://localhost:3000', + maxFee: 100000, + unlink: false, + }; + + private readonly configLoader: ConfigLoader; + + constructor(private readonly logger: Logger, protected readonly params: LinkParams) { + this.configLoader = new ConfigLoader(logger); + } + + public async run(passedPresetData?: ConfigPreset | undefined, passedAddresses?: Addresses | undefined): Promise { + const presetData = passedPresetData ?? this.configLoader.loadExistingPresetData(this.params.target, this.params.password); + const addresses = passedAddresses ?? this.configLoader.loadExistingAddresses(this.params.target, this.params.password); + const customPreset = this.configLoader.loadCustomPreset(this.params.customPreset, this.params.password); + this.logger.info(`${this.params.unlink ? 'Unlinking' : 'Linking'} nodes`); + + const providedUrl = this.params.url; + const urls = + (this.params.useKnownRestGateways && presetData.knownRestGateways) || (providedUrl ? [providedUrl.replace(/\/$/, '')] : []); + if (!urls.length) { + throw new Error('URLs could not be resolved!'); + } + const repositoryInfo = await new RemoteNodeService(this.logger).getBestRepositoryInfo(urls); + const repositoryFactory = repositoryInfo.repositoryFactory; + + await new AnnounceService(this.logger, new BootstrapAccountResolver(this.logger)).announce( + repositoryFactory, + this.params.maxFee, + this.params.ready, + this.configLoader.mergePresets(presetData, customPreset), + addresses, + this, + ); + } + + public createTransactions(params: LinkServiceTransactionFactoryParams): Promise { + return new LinkTransactionGenericFactory(this.logger, this.confirmUnlink, this.params.unlink).createTransactions(params); + } + + private confirmUnlink = async (accountName: string, alreadyLinkedAccount: T, print: (account: T) => string): Promise => { + if (this.params.removeOldLinked === undefined) { + return ( + this.params.ready || + ( + await prompt([ + { + name: 'value', + message: `Do you want to unlink the old ${accountName} ${print(alreadyLinkedAccount)}?`, + type: 'confirm', + default: false, + }, + ]) + ).value + ); + } + return this.params.removeOldLinked; + }; +} diff --git a/packages/bootstrap-cli/src/service/RewardProgramService.ts b/packages/bootstrap-cli/src/service/RewardProgramService.ts new file mode 100644 index 000000000..57b7e2d44 --- /dev/null +++ b/packages/bootstrap-cli/src/service/RewardProgramService.ts @@ -0,0 +1,139 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { readFileSync } from 'fs'; +import { join } from 'path'; +import { + Addresses, + AnnounceService, + BootstrapUtils, + ConfigLoader, + ConfigPreset, + Logger, + NodeAccount, + NodePreset, + RemoteNodeService, + TransactionFactory, +} from 'symbol-bootstrap-core'; +import { Address, Deadline, PlainMessage, Transaction, TransferTransaction, UInt64 } from 'symbol-sdk'; +import { BootstrapAccountResolver } from './BootstrapAccountResolver'; + +export type RewardProgramParams = { + target: string; + password?: string; + url: string; + maxFee?: number; + useKnownRestGateways: boolean; + ready?: boolean; + customPreset?: string; +}; + +export interface RewardProgramServiceTransactionFactoryParams { + presetData: ConfigPreset; + nodePreset: NodePreset; + nodeAccount: NodeAccount; + deadline: Deadline; + maxFee: UInt64; +} + +export class RewardProgramService implements TransactionFactory { + public static readonly defaultParams: RewardProgramParams = { + useKnownRestGateways: false, + target: BootstrapUtils.defaultTargetFolder, + url: 'http://localhost:3000', + }; + + private readonly configLoader: ConfigLoader; + + constructor(private readonly logger: Logger, protected readonly params: RewardProgramParams) { + this.configLoader = new ConfigLoader(logger); + } + + public async enroll(passedPresetData?: ConfigPreset | undefined, passedAddresses?: Addresses | undefined): Promise { + const presetData = passedPresetData ?? this.configLoader.loadExistingPresetData(this.params.target, this.params.password); + const addresses = passedAddresses ?? this.configLoader.loadExistingAddresses(this.params.target, this.params.password); + const customPreset = this.configLoader.loadCustomPreset(this.params.customPreset, this.params.password); + if (!presetData.rewardProgramEnrollmentAddress) { + this.logger.warn('This network does not have a reward program controller public key. Nodes cannot be registered.'); + return; + } + + const providedUrl = this.params.url; + const urls = + (this.params.useKnownRestGateways && presetData.knownRestGateways) || (providedUrl ? [providedUrl.replace(/\/$/, '')] : []); + if (!urls.length) { + throw new Error('URLs could not be resolved!'); + } + const repositoryInfo = await new RemoteNodeService(this.logger).getBestRepositoryInfo(urls); + const repositoryFactory = repositoryInfo.repositoryFactory; + + await new AnnounceService(this.logger, new BootstrapAccountResolver(this.logger)).announce( + repositoryFactory, + this.params.maxFee, + this.params.ready, + this.configLoader.mergePresets(presetData, customPreset), + addresses, + this, + '1M+', + ); + } + + async createTransactions({ + presetData, + nodePreset, + nodeAccount, + deadline, + maxFee, + }: RewardProgramServiceTransactionFactoryParams): Promise { + const transactions: Transaction[] = []; + const networkType = presetData.networkType; + if (!nodePreset.rewardProgram) { + this.logger.warn(`Node ${nodeAccount.name} hasn't been configured with rewardProgram: preset property.`); + return transactions; + } + + if (!presetData.rewardProgramEnrollmentAddress) { + return transactions; + } + const rewardProgramEnrollmentAddress = Address.createFromRawAddress(presetData.rewardProgramEnrollmentAddress); + const agentPublicKey = nodeAccount.transport.publicKey; + if (!agentPublicKey) { + this.logger.warn(`Cannot resolve harvester public key of node ${nodeAccount.name}`); + return transactions; + } + if (!nodePreset.host) { + this.logger.warn( + `Node ${nodeAccount.name} public host name hasn't been provided! Please use 'host: myNodeHost' custom preset param.`, + ); + return transactions; + } + const agentUrl = + nodePreset.agentUrl || `https://${nodePreset.host}:${nodePreset.rewardProgramAgentPort || presetData.rewardProgramAgentPort}`; + const certFolder = BootstrapUtils.getTargetNodesFolder(this.params.target, false, nodePreset.name, 'agent'); + const base64AgentCaCsrFile = readFileSync(join(certFolder, 'agent-ca.csr.pem'), 'base64'); + const plainMessage = `enroll ${agentUrl} ${base64AgentCaCsrFile}`; + const message = PlainMessage.create(plainMessage); + this.logger.info(`Creating enrolment transfer with message '${plainMessage}'`); + const transaction: Transaction = TransferTransaction.create( + deadline, + rewardProgramEnrollmentAddress, + [], + message, + networkType, + maxFee, + ); + return [transaction]; + } +} diff --git a/packages/bootstrap-cli/src/service/index.ts b/packages/bootstrap-cli/src/service/index.ts new file mode 100644 index 000000000..2f73250f2 --- /dev/null +++ b/packages/bootstrap-cli/src/service/index.ts @@ -0,0 +1,6 @@ +// created from 'create-ts-index' + +export * from './BootstrapAccountResolver'; +export * from './BootstrapCommandUtils'; +export * from './LinkService'; +export * from './RewardProgramService'; diff --git a/packages/bootstrap-cli/test/commands/config.test.ts b/packages/bootstrap-cli/test/commands/config.test.ts new file mode 100644 index 000000000..b8ab78a96 --- /dev/null +++ b/packages/bootstrap-cli/test/commands/config.test.ts @@ -0,0 +1,43 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { expect, test } from '@oclif/test'; +import { ConfigLoader } from 'symbol-bootstrap-core'; +import { Account, NetworkType } from 'symbol-sdk'; + +describe('config', () => { + it('should be valid account', function () { + const privateKey = 'AAA'.padStart(64, '0'); + expect(ConfigLoader.toConfigFromAccount(Account.createFromPrivateKey(privateKey, NetworkType.PRIVATE_TEST))).deep.eq({ + address: 'VB26Y6PDUYEVDVWRWHGEGSZ43FT6726XOFU2FJQ', + publicKey: '512C97A7527CD49CBD8EDB6A0707EC239A9F24DB2EFFF2272A92BFD8F987D9B3', + privateKey: privateKey, + }); + }); + test.stdout() + .command(['config', '-p', 'dualCurrency', '-r', '--password', '1111']) + .it('runs config', (ctx) => { + console.log(ctx.stdout); + }); +}); + +describe('config with opt in', () => { + test.stdout() + .command(['config', '-p', 'dualCurrency', '-r', '-c', './test/custom_preset.yml', '--noPassword']) + .it('runs config', (ctx) => { + console.log(ctx.stdout); + }); +}); diff --git a/test/commands/decrypt.test.ts b/packages/bootstrap-cli/test/commands/decrypt.test.ts similarity index 89% rename from test/commands/decrypt.test.ts rename to packages/bootstrap-cli/test/commands/decrypt.test.ts index e4adfdb09..0292725c7 100644 --- a/test/commands/decrypt.test.ts +++ b/packages/bootstrap-cli/test/commands/decrypt.test.ts @@ -15,54 +15,49 @@ */ import { expect, test } from '@oclif/test'; -import { existsSync } from 'fs'; -import { BootstrapUtils } from '../../src/service'; -import { CryptoUtils } from '../../src/service/CryptoUtils'; - +import { BootstrapUtils, CryptoUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); describe('decrypt', () => { - test.add('remove target', () => BootstrapUtils.deleteFolder('target/tests.encrypt')) + test.add('remove target', () => BootstrapUtils.deleteFolder(logger, 'target/tests.encrypt')) .stdout() .command('decrypt --source test/encrypt/encrypted.yml --destination target/tests.encrypt/plain.yml --password 1111'.split(' ')) .it('runs decrypt and creates file', async (ctx) => { expect(ctx.stdout).to.contain( 'Decrypted file target/tests.encrypt/plain.yml has been created! Any private keys on this file are now in plain text. Remember to remove the file!', ); - expect(existsSync('target/tests.encrypt/plain.yml')).eq(true); expect(await BootstrapUtils.loadYaml('target/tests.encrypt/plain.yml', false)).deep.eq( await BootstrapUtils.loadYaml('test/encrypt/plain.yml', false), ); expect(CryptoUtils.encryptedCount(await BootstrapUtils.loadYaml('target/tests.encrypt/plain.yml', false))).eq(0); }); - test.add('remove target', () => BootstrapUtils.deleteFolder('target/tests.encrypt')) + test.add('remove target', () => BootstrapUtils.deleteFolder(logger, 'target/tests.encrypt')) .stdout() .command('decrypt --source test/encrypt/plain.yml --destination target/tests.encrypt/plain.yml --password 1111'.split(' ')) .it('runs decrypt on plain and creates file', async (ctx) => { expect(ctx.stdout).to.contain( 'Decrypted file target/tests.encrypt/plain.yml has been created! Any private keys on this file are now in plain text. Remember to remove the file!', ); - expect(existsSync('target/tests.encrypt/plain.yml')).eq(true); expect(await BootstrapUtils.loadYaml('target/tests.encrypt/plain.yml', false)).deep.eq( await BootstrapUtils.loadYaml('test/encrypt/plain.yml', false), ); expect(CryptoUtils.encryptedCount(await BootstrapUtils.loadYaml('target/tests.encrypt/plain.yml', false))).eq(0); }); - test.add('remove target', () => BootstrapUtils.deleteFolder('target/tests.encrypt')) + test.add('remove target', () => BootstrapUtils.deleteFolder(logger, 'target/tests.encrypt')) .stdout() .command('decrypt --source test/encrypt/plain.yml --destination target/tests.encrypt/plain.yml --password 1111'.split(' ')) .it('runs decrypt on an plain file and creates file', async (ctx) => { expect(ctx.stdout).to.contain( 'Decrypted file target/tests.encrypt/plain.yml has been created! Any private keys on this file are now in plain text. Remember to remove the file!', ); - expect(existsSync('target/tests.encrypt/plain.yml')).eq(true); expect(await BootstrapUtils.loadYaml('target/tests.encrypt/plain.yml', false)).deep.eq( await BootstrapUtils.loadYaml('test/encrypt/plain.yml', false), ); expect(CryptoUtils.encryptedCount(await BootstrapUtils.loadYaml('target/tests.encrypt/plain.yml', false))).eq(0); }); - test.add('remove target', () => BootstrapUtils.deleteFolder('target/tests.encrypt')) + test.add('remove target', () => BootstrapUtils.deleteFolder(logger, 'target/tests.encrypt')) .stdout() .command('decrypt --source test/encrypt/encrypted.yml --destination target/tests.encrypt/plain.yml --password 1'.split(' ')) .catch((ctx) => { @@ -70,7 +65,7 @@ describe('decrypt', () => { }) .it('password too short'); - test.add('remove target', () => BootstrapUtils.deleteFolder('target/tests.encrypt')) + test.add('remove target', () => BootstrapUtils.deleteFolder(logger, 'target/tests.encrypt')) .stdout() .command('decrypt --source test/encrypt/encrypted.yml --destination target/tests.encrypt/plain.yml --password 222222'.split(' ')) .catch((ctx) => { @@ -78,7 +73,7 @@ describe('decrypt', () => { }) .it('invalid password'); - test.add('remove target', () => BootstrapUtils.deleteFolder('target/tests.encrypt')) + test.add('remove target', () => BootstrapUtils.deleteFolder(logger, 'target/tests.encrypt')) .stdout() .command('decrypt --source test/encrypt/plain.yml --destination test/encrypt/plain.yml --password 1111'.split(' ')) .catch((ctx) => { diff --git a/test/commands/encrypt.test.ts b/packages/bootstrap-cli/test/commands/encrypt.test.ts similarity index 89% rename from test/commands/encrypt.test.ts rename to packages/bootstrap-cli/test/commands/encrypt.test.ts index b304f396e..1c689fabf 100644 --- a/test/commands/encrypt.test.ts +++ b/packages/bootstrap-cli/test/commands/encrypt.test.ts @@ -15,17 +15,14 @@ */ import { expect, test } from '@oclif/test'; -import { existsSync } from 'fs'; -import { BootstrapUtils } from '../../src/service'; -import { CryptoUtils } from '../../src/service/CryptoUtils'; - +import { BootstrapUtils, CryptoUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); describe('encrypt', () => { - test.add('remove target', () => BootstrapUtils.deleteFolder('target/tests.encrypt')) + test.add('remove target', () => BootstrapUtils.deleteFolder(logger, 'target/tests.encrypt')) .stdout() .command('encrypt --source test/encrypt/plain.yml --destination target/tests.encrypt/encrypted.yml --password 1111'.split(' ')) .it('runs encrypt and creates file', async (ctx) => { expect(ctx.stdout).to.contain('Encrypted file target/tests.encrypt/encrypted.yml has been created!'); - expect(existsSync('target/tests.encrypt/encrypted.yml')).eq(true); expect(await BootstrapUtils.loadYaml('target/tests.encrypt/encrypted.yml', '1111')).deep.eq( await BootstrapUtils.loadYaml('test/encrypt/encrypted.yml', '1111'), ); @@ -34,7 +31,7 @@ describe('encrypt', () => { ); }); - test.add('remove target', () => BootstrapUtils.deleteFolder('target/tests.encrypt')) + test.add('remove target', () => BootstrapUtils.deleteFolder(logger, 'target/tests.encrypt')) .stdout() .command('encrypt --source test/encrypt/plain.yml --destination target/tests.encrypt/encrypted.yml --password 1'.split(' ')) .catch((ctx) => { @@ -42,7 +39,7 @@ describe('encrypt', () => { }) .it('password too short'); - test.add('remove target', () => BootstrapUtils.deleteFolder('target/tests.encrypt')) + test.add('remove target', () => BootstrapUtils.deleteFolder(logger, 'target/tests.encrypt')) .stdout() .command('encrypt --source test/encrypt/encrypted.yml --destination target/tests.encrypt/encrypted.yml --password 1111'.split(' ')) .catch((ctx) => { @@ -52,7 +49,7 @@ describe('encrypt', () => { }) .it('already encrypted'); - test.add('remove target', () => BootstrapUtils.deleteFolder('target/tests.encrypt')) + test.add('remove target', () => BootstrapUtils.deleteFolder(logger, 'target/tests.encrypt')) .stdout() .command('encrypt --source test/encrypt/plain.yml --destination test/encrypt/plain.yml --password 1111'.split(' ')) .catch((ctx) => { diff --git a/test/custom_bootstrap.yml b/packages/bootstrap-cli/test/custom_bootstrap.yml similarity index 100% rename from test/custom_bootstrap.yml rename to packages/bootstrap-cli/test/custom_bootstrap.yml diff --git a/packages/bootstrap-cli/test/custom_preset.yml b/packages/bootstrap-cli/test/custom_preset.yml new file mode 100644 index 000000000..387b81c5e --- /dev/null +++ b/packages/bootstrap-cli/test/custom_preset.yml @@ -0,0 +1,23 @@ +minFeeMultiplier: 0 +defaultDynamicFeeMultiplier: 0 +baseNamespace: 'bob' +nemesisGenerationHashSeed: 6C1B92391CCB41C96478471C2634C111D9E989DECD66130C0430B5B8D20117CD +dockerComposeDebugMode: true + +#totalChainImportance: 8998999998000000 +#nemesis: +## Disable harvest currency with repeat 0 +# mosaics: [{}, { repeat: 0 }] + +databases: + - dockerComposeDebugMode: false +nemesis: + nemesisSignerPrivateKey: B2AF9675B7AA8CCCBB3C1072256B3DF7354223FB5C490FFBDDB1C60696E25219 + mosaics: + - name: 'marley' + - name: 'reggae' + +wallets: + - profiles: + - name: test + location: ./test/profiles/wallet-profile-test.json diff --git a/test/encrypt/encrypted.yml b/packages/bootstrap-cli/test/encrypt/encrypted.yml similarity index 100% rename from test/encrypt/encrypted.yml rename to packages/bootstrap-cli/test/encrypt/encrypted.yml diff --git a/test/encrypt/plain.yml b/packages/bootstrap-cli/test/encrypt/plain.yml similarity index 100% rename from test/encrypt/plain.yml rename to packages/bootstrap-cli/test/encrypt/plain.yml diff --git a/test/freenodes_preset.yml b/packages/bootstrap-cli/test/freenodes_preset.yml similarity index 100% rename from test/freenodes_preset.yml rename to packages/bootstrap-cli/test/freenodes_preset.yml diff --git a/test/profiles/wallet-profile-test.json b/packages/bootstrap-cli/test/profiles/wallet-profile-test.json similarity index 100% rename from test/profiles/wallet-profile-test.json rename to packages/bootstrap-cli/test/profiles/wallet-profile-test.json diff --git a/test/service/LinkService.test.ts b/packages/bootstrap-cli/test/service/LinkService.test.ts similarity index 92% rename from test/service/LinkService.test.ts rename to packages/bootstrap-cli/test/service/LinkService.test.ts index 1f2834dac..def9c4db1 100644 --- a/test/service/LinkService.test.ts +++ b/packages/bootstrap-cli/test/service/LinkService.test.ts @@ -1,5 +1,5 @@ /* - * Copyright 2020 NEM + * Copyright 2021 NEM * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ import { expect } from '@oclif/test'; import 'mocha'; import { it } from 'mocha'; +import { BootstrapService, ConfigService, DefaultAccountResolver, LoggerFactory, LogType, Preset } from 'symbol-bootstrap-core'; import { AccountInfoDTO } from 'symbol-openapi-typescript-fetch-client'; import { AccountHttp, @@ -29,8 +30,8 @@ import { UInt64, VotingKeyLinkTransaction, } from 'symbol-sdk'; -import { BootstrapService, ConfigService, LinkService, LinkServiceTransactionFactoryParams, Preset } from '../../src/service'; - +import { LinkService, LinkServiceTransactionFactoryParams } from '../../src/service'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); const password = '1234'; describe('LinkService', () => { const alreadyLinkedAccountInfoDto: AccountInfoDTO = { @@ -114,15 +115,17 @@ describe('LinkService', () => { target: 'target/tests/testnet-dual', password, reset: false, + offline: true, preset: Preset.testnet, assembly: 'dual', + accountResolver: new DefaultAccountResolver(), customPresetObject: { nodeUseRemoteAccount: true, }, }; try { - await new BootstrapService().config(params); - await new BootstrapService().link(params); + await new BootstrapService(logger).config(params); + await new LinkService(logger, params).run(); } catch (e) { expect(e.message.indexOf('No up and running node could be found out of:'), e.message).to.be.greaterThan(-1); expect(e.message.indexOf('http://localhost:3000'), e.message).to.be.greaterThan(-1); @@ -137,15 +140,15 @@ describe('LinkService', () => { target: 'target/tests/testnet-dual-voting', password, reset: false, - preset: Preset.testnet, offline: true, + preset: Preset.testnet, customPreset: './test/unit-test-profiles/voting_preset.yml', customPresetObject: { nodeUseRemoteAccount: true, }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const maxFee = UInt64.fromUint(10); const nodeAccount = addresses.nodes![0]; const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); @@ -157,7 +160,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(3); assertTransaction(transactions[0], TransactionType.ACCOUNT_KEY_LINK, LinkAction.Link, nodeAccount.remote!.publicKey); assertTransaction(transactions[1], TransactionType.VRF_KEY_LINK, LinkAction.Link, nodeAccount.vrf!.publicKey); @@ -188,7 +191,7 @@ describe('LinkService', () => { }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const maxFee = UInt64.fromUint(10); const nodeAccount = addresses.nodes![0]; const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); @@ -200,7 +203,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(3); assertTransaction(transactions[0], TransactionType.ACCOUNT_KEY_LINK, LinkAction.Link, nodeAccount.remote!.publicKey); assertTransaction(transactions[1], TransactionType.VRF_KEY_LINK, LinkAction.Link, nodeAccount.vrf!.publicKey); @@ -235,7 +238,7 @@ describe('LinkService', () => { }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const nodeAccount = addresses.nodes![0]; const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); const transactionFactoryParams: LinkServiceTransactionFactoryParams = { @@ -246,7 +249,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(3); assertTransaction(transactions[0], TransactionType.ACCOUNT_KEY_LINK, LinkAction.Link, nodeAccount.remote!.publicKey); assertTransaction(transactions[1], TransactionType.VRF_KEY_LINK, LinkAction.Link, nodeAccount.vrf!.publicKey); @@ -276,7 +279,7 @@ describe('LinkService', () => { }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const nodeAccount = addresses.nodes![0]; const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); const transactionFactoryParams: LinkServiceTransactionFactoryParams = { @@ -287,7 +290,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; expect(addresses!.nodes![0].voting?.length).eq(1); - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(2); assertTransaction(transactions[0], TransactionType.ACCOUNT_KEY_LINK, LinkAction.Link, nodeAccount.remote!.publicKey); assertTransaction(transactions[1], TransactionType.VRF_KEY_LINK, LinkAction.Link, nodeAccount.vrf!.publicKey); @@ -315,7 +318,7 @@ describe('LinkService', () => { }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const nodeAccount = addresses.nodes![0]; const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); const transactionFactoryParams: LinkServiceTransactionFactoryParams = { @@ -326,7 +329,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(3); assertTransaction(transactions[0], TransactionType.ACCOUNT_KEY_LINK, LinkAction.Link, nodeAccount.remote!.publicKey); assertTransaction(transactions[1], TransactionType.VRF_KEY_LINK, LinkAction.Link, nodeAccount.vrf!.publicKey); @@ -360,7 +363,7 @@ describe('LinkService', () => { }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const nodeAccount = addresses.nodes![0]; const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); const transactionFactoryParams: LinkServiceTransactionFactoryParams = { @@ -371,7 +374,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; expect(addresses!.nodes![0].voting?.length).eq(2); - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(3); assertTransaction(transactions[0], TransactionType.ACCOUNT_KEY_LINK, LinkAction.Link, nodeAccount.remote!.publicKey); assertTransaction(transactions[1], TransactionType.VRF_KEY_LINK, LinkAction.Link, nodeAccount.vrf!.publicKey); @@ -404,12 +407,13 @@ describe('LinkService', () => { preset: Preset.testnet, customPreset: './test/unit-test-profiles/voting_preset.yml', customPresetObject: { + lastKnownNetworkEpoch: 235, autoUpdateVotingKeys: true, nodeUseRemoteAccount: true, }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const nodeAccount = addresses.nodes![0]; const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); const transactionFactoryParams: LinkServiceTransactionFactoryParams = { @@ -420,7 +424,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(3); assertTransaction(transactions[0], TransactionType.ACCOUNT_KEY_LINK, LinkAction.Link, nodeAccount.remote!.publicKey); assertTransaction(transactions[1], TransactionType.VRF_KEY_LINK, LinkAction.Link, nodeAccount.vrf!.publicKey); @@ -455,7 +459,7 @@ describe('LinkService', () => { }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const nodeAccount = addresses.nodes![0]; const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); const transactionFactoryParams: LinkServiceTransactionFactoryParams = { @@ -466,7 +470,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; expect(addresses!.nodes![0].voting?.length).eq(2); - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); // The original link needs to still be linked as it's current! expect(transactions.length).eq(4); assertTransaction(transactions[0], TransactionType.ACCOUNT_KEY_LINK, LinkAction.Link, nodeAccount.remote!.publicKey); @@ -506,7 +510,7 @@ describe('LinkService', () => { }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const maxFee = UInt64.fromUint(10); const nodeAccount = addresses.nodes![0]; const alreadyLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](alreadyLinkedAccountInfoDto); @@ -518,7 +522,7 @@ describe('LinkService', () => { mainAccountInfo: alreadyLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(6); assertTransaction( @@ -572,7 +576,7 @@ describe('LinkService', () => { }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const alreadyLinkedAccountInfoDto: AccountInfoDTO = { account: { version: 1, @@ -613,7 +617,7 @@ describe('LinkService', () => { mainAccountInfo: alreadyLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(4); assertTransaction( @@ -649,7 +653,7 @@ describe('LinkService', () => { }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const alreadyLinkedAccountInfoDto: AccountInfoDTO = { account: { version: 1, @@ -690,7 +694,7 @@ describe('LinkService', () => { mainAccountInfo: alreadyLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(6); assertTransaction( @@ -743,7 +747,7 @@ describe('LinkService', () => { removeOldLinked: false, }; const alreadyLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](alreadyLinkedAccountInfoDto); - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const maxFee = UInt64.fromUint(10); const nodeAccount = addresses.nodes![0]; const transactionFactoryParams: LinkServiceTransactionFactoryParams = { @@ -754,7 +758,7 @@ describe('LinkService', () => { mainAccountInfo: alreadyLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(0); }); @@ -766,13 +770,14 @@ describe('LinkService', () => { target: 'target/tests/testnet-dual', password, reset: true, + offline: true, preset: Preset.testnet, customPresetObject: { nodeUseRemoteAccount: true, }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const maxFee = UInt64.fromUint(10); const nodeAccount = addresses.nodes![0]; const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); @@ -784,7 +789,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(2); assertTransaction(transactions[0], TransactionType.ACCOUNT_KEY_LINK, LinkAction.Link, nodeAccount.remote!.publicKey); assertTransaction(transactions[1], TransactionType.VRF_KEY_LINK, LinkAction.Link, nodeAccount.vrf!.publicKey); @@ -798,13 +803,14 @@ describe('LinkService', () => { target: 'target/tests/testnet-dual', password, reset: true, + offline: true, preset: Preset.testnet, customPresetObject: { nodeUseRemoteAccount: true, }, assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const maxFee = UInt64.fromUint(10); const nodeAccount = addresses.nodes![0]; const alreadyLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](alreadyLinkedAccountInfoDto); @@ -816,7 +822,7 @@ describe('LinkService', () => { mainAccountInfo: alreadyLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(4); assertTransaction( transactions[0], @@ -842,6 +848,7 @@ describe('LinkService', () => { target: 'target/tests/testnet-dual', password, reset: true, + offline: true, preset: Preset.testnet, customPresetObject: { nodeUseRemoteAccount: true, @@ -850,7 +857,7 @@ describe('LinkService', () => { removeOldLinked: false, }; const alreadyLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](alreadyLinkedAccountInfoDto); - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const maxFee = UInt64.fromUint(10); const nodeAccount = addresses.nodes![0]; const transactionFactoryParams: LinkServiceTransactionFactoryParams = { @@ -861,7 +868,7 @@ describe('LinkService', () => { mainAccountInfo: alreadyLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(0); }); @@ -880,7 +887,7 @@ describe('LinkService', () => { assembly: 'dual', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const maxFee = UInt64.fromUint(10); const nodeAccount = addresses.nodes![0]; const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); @@ -892,7 +899,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(1); assertTransaction(transactions[0], TransactionType.VRF_KEY_LINK, LinkAction.Link, nodeAccount.vrf!.publicKey); }); @@ -911,7 +918,7 @@ describe('LinkService', () => { }, assembly: 'api', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const maxFee = UInt64.fromUint(10); const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); @@ -923,7 +930,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(0); }); @@ -943,7 +950,7 @@ describe('LinkService', () => { }, assembly: 'api', }; - const { addresses, presetData } = await new BootstrapService().config(params); + const { addresses, presetData } = await new BootstrapService(logger).config(params); const maxFee = UInt64.fromUint(10); const nodeAccount = addresses.nodes![0]; const notLinkedAccountInfo: AccountInfo = (AccountHttp as any)['toAccountInfo'](notLinkedAccountDto); @@ -955,7 +962,7 @@ describe('LinkService', () => { mainAccountInfo: notLinkedAccountInfo, }; - const transactions = await new LinkService(params).createTransactions(transactionFactoryParams); + const transactions = await new LinkService(logger, params).createTransactions(transactionFactoryParams); expect(transactions.length).eq(2); assertTransaction(transactions[0], TransactionType.ACCOUNT_KEY_LINK, LinkAction.Link, nodeAccount.remote!.publicKey); assertVotingTransaction( diff --git a/packages/bootstrap-cli/test/service/RewardProgramService.test.ts b/packages/bootstrap-cli/test/service/RewardProgramService.test.ts new file mode 100644 index 000000000..d57f393f6 --- /dev/null +++ b/packages/bootstrap-cli/test/service/RewardProgramService.test.ts @@ -0,0 +1,91 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { expect } from '@oclif/test'; +import 'mocha'; +import { BootstrapService, ConfigService, LoggerFactory, LogType, Preset } from 'symbol-bootstrap-core'; +import { Deadline, TransactionType, TransferTransaction, UInt64 } from 'symbol-sdk'; +import { LinkService, RewardProgramService, RewardProgramServiceTransactionFactoryParams } from '../../src/service'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); +const password = '1234'; +describe('RewardProgramService', () => { + it('RewardProgramService create transactions when supernode', async () => { + const params = { + ...ConfigService.defaultParams, + ...LinkService.defaultParams, + target: 'target/tests/testnet-supernode', + password, + reset: false, + offline: true, + preset: Preset.testnet, + customPreset: './test/unit-test-profiles/supernode.yml', + customPresetObject: { + nodeUseRemoteAccount: true, + }, + assembly: 'dual', + }; + const { addresses, presetData } = await new BootstrapService(logger).config(params); + const maxFee = UInt64.fromUint(10); + const nodeAccount = addresses.nodes![0]; + const nodePreset = presetData.nodes![0]; + const transactionFactoryParams: RewardProgramServiceTransactionFactoryParams = { + presetData, + deadline: Deadline.create(1), + nodePreset: nodePreset, + nodeAccount: nodeAccount, + maxFee: maxFee, + }; + + const transactions = await new RewardProgramService(logger, params).createTransactions(transactionFactoryParams); + expect(transactions.length).eq(1); + const transaction = transactions[0] as TransferTransaction; + expect(transaction.type).eq(TransactionType.TRANSFER); + expect(transaction.message.payload).eq( + 'enroll https://fboucquez-agent-symbollocal.ngrok.io LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlHU01FWUNBUUF3RXpFUk1BOEdBMVVFQXd3SVFXZGxiblFnUTBFd0tqQUZCZ01yWlhBRElRQmtJVU1VTjJMSQpKMWcraW1TQW0zM3lkNDRVSlhWdjVkZi95Z0N6eGJVbUc2QUFNQVVHQXl0bGNBTkJBTncyWlIvQUtxUzlSblJWCnMzYWtZcXdHMnAzR0RTREQzVlU3VDFOSk9MWkdiU3g3alY2WnovS2ZzMGgvcEsyRmhvb2taL2oxeUxUQzgxdEkKZzR6MWFnWT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCg==', + ); + }); + + it('Supernode create transactions when dual + voting, not supernode', async () => { + const params = { + ...ConfigService.defaultParams, + ...LinkService.defaultParams, + target: 'target/tests/testnet-dual-voting', + password, + reset: false, + offline: true, + preset: Preset.testnet, + customPreset: './test/unit-test-profiles/voting_preset.yml', + customPresetObject: { + nodeUseRemoteAccount: true, + }, + assembly: 'dual', + }; + const { addresses, presetData } = await new BootstrapService(logger).config(params); + const maxFee = UInt64.fromUint(10); + const nodeAccount = addresses.nodes![0]; + const nodePreset = presetData.nodes![0]; + const transactionFactoryParams: RewardProgramServiceTransactionFactoryParams = { + presetData, + deadline: Deadline.create(1), + nodePreset: nodePreset, + nodeAccount: nodeAccount, + maxFee: maxFee, + }; + + const transactions = await new RewardProgramService(logger, params).createTransactions(transactionFactoryParams); + expect(transactions.length).eq(0); + }); +}); diff --git a/test/commands/Wizard.test.ts b/packages/bootstrap-cli/test/service/Wizard.test.ts similarity index 91% rename from test/commands/Wizard.test.ts rename to packages/bootstrap-cli/test/service/Wizard.test.ts index bb02c263e..d2a1a8f50 100644 --- a/test/commands/Wizard.test.ts +++ b/packages/bootstrap-cli/test/service/Wizard.test.ts @@ -16,10 +16,9 @@ import { expect } from '@oclif/test'; import { stdin } from 'mock-stdin'; +import { BootstrapUtils, CustomPreset, LoggerFactory, LogType, Preset, PrivateKeySecurityMode, RewardProgram } from 'symbol-bootstrap-core'; import Wizard, { Network } from '../../src/commands/wizard'; -import { CustomPreset, PrivateKeySecurityMode } from '../../src/model'; -import { BootstrapUtils, Preset, RewardProgram } from '../../src/service'; - +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); export const StdUtils = { keys: Object.freeze({ up: '\u001b[A', @@ -27,16 +26,13 @@ export const StdUtils = { left: '\u001b[D', right: '\u001b[C', }), - in: (responses: string[]) => { + in: (responses: string[]): void => { let k = 0; const s = stdin(); function sendAnswer() { setTimeout(function () { const text = responses[k]; - if (typeof text !== 'string') { - throw new Error('Should give only text responses ' + JSON.stringify(responses, null, 2)); - } s.send(text); k += 1; if (k < responses.length) { @@ -52,7 +48,7 @@ export const StdUtils = { describe('Wizard', () => { const testFolder = 'target/wizardTest'; beforeEach(async () => { - BootstrapUtils.deleteFolder(testFolder); + BootstrapUtils.deleteFolder(logger, testFolder); }); it('Provide private keys', async () => { // assembly @@ -119,7 +115,7 @@ describe('Wizard', () => { preset: Preset.mainnet, privateKeySecurityMode: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, }; - const customPreset = BootstrapUtils.loadYaml(customPresetFile, password); + const customPreset = await BootstrapUtils.loadYaml(customPresetFile, password); expect(customPreset).deep.eq(expectedCustomPreset); }); @@ -179,7 +175,7 @@ describe('Wizard', () => { preset: Preset.mainnet, privateKeySecurityMode: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, }; - const customPreset = BootstrapUtils.loadYaml(customPresetFile, password); + const customPreset = await BootstrapUtils.loadYaml(customPresetFile, password); expect(customPreset).deep.eq(expectedCustomPreset); }); }); diff --git a/packages/bootstrap-cli/test/unit-test-profiles/supernode.yml b/packages/bootstrap-cli/test/unit-test-profiles/supernode.yml new file mode 100644 index 000000000..bc0a6f264 --- /dev/null +++ b/packages/bootstrap-cli/test/unit-test-profiles/supernode.yml @@ -0,0 +1,13 @@ +privateKeySecurityMode: PROMPT_MAIN +maxUnlockedAccounts: 20 +nodes: + - voting: true + rewardProgram: 'supernode' + host: fboucquez-agent-symbollocal.ngrok.io + agentUrl: https://fboucquez-agent-symbollocal.ngrok.io + restGatewayUrl: http://fboucquez-rest-gateway-symbollocal.ngrok.io + mainPrivateKey: CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD + transportPrivateKey: 6154154096354BC3DB522174ACD8BFE553893A0991BD5D105599846F17A3383B + remotePrivateKey: EFE3F0EF0AB368B8D7AC194D52A8CCFA2D5050B80B9C76E4D2F4D4BF2CD461C1 + vrfPrivateKey: F3C24C153783B683E40FB2671493B54480370BF4E3AB8027D4BF1293E14EB9B8 + agentPrivateKey: AAAA231C860EB1B6E3A4F8366C8F0F6C7C2462A40263DCB67124FB76CDD4E368 diff --git a/test/unit-test-profiles/voting_preset.yml b/packages/bootstrap-cli/test/unit-test-profiles/voting_preset.yml similarity index 100% rename from test/unit-test-profiles/voting_preset.yml rename to packages/bootstrap-cli/test/unit-test-profiles/voting_preset.yml diff --git a/packages/bootstrap-cli/tsconfig.build.json b/packages/bootstrap-cli/tsconfig.build.json new file mode 100644 index 000000000..a74389c9d --- /dev/null +++ b/packages/bootstrap-cli/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.build.json", + + "compilerOptions": { + "outDir": "./lib" + }, + + "include": ["src/**/*"] +} diff --git a/packages/bootstrap-cli/tsconfig.json b/packages/bootstrap-cli/tsconfig.json new file mode 100644 index 000000000..63b5082a6 --- /dev/null +++ b/packages/bootstrap-cli/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/bootstrap-core/README.md b/packages/bootstrap-core/README.md new file mode 100644 index 000000000..64ee9bc6a --- /dev/null +++ b/packages/bootstrap-core/README.md @@ -0,0 +1,71 @@ +# symbol-bootstrap-core + +Symbol Typescript/Javascript Library that allows you creating, configuring and running Symbol's simple node networks or nodes to be sync with existing networks. + +[![Version](https://img.shields.io/npm/v/symbol-bootstrap-core.svg)](https://npmjs.org/package/symbol-bootstrap-core) +[![Downloads/week](https://img.shields.io/npm/dw/symbol-bootstrap-core.svg)](https://npmjs.org/package/symbol-bootstrap-core) +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +[![Build Status](https://travis-ci.com/symbol/symbol-bootstrap.svg?branch=main)](https://travis-ci.com/symbol/symbol-bootstrap) +[![Coverage Status](https://coveralls.io/repos/github/symbol/symbol-bootstrap/badge.svg?branch=main)](https://coveralls.io/github/symbol/symbol-bootstrap?branch=main) +[![Api Doc](https://img.shields.io/badge/api-doc-blue.svg)](https://nemtech.github.io/symbol-bootstrap/) + +# Usage + +The library can be used by adding the dependency to your Typescript/Javascript project. + +``` +$ npm install --save symbol-bootstrap-core +``` + +Adding the dependency: + +``` +"dependencies": { + .... + "symbol-bootstrap-core": "1.1.x", + .... +} +``` + +You can use the [BootstrapService](src/service/BootstrapService.ts) facade to programmatically configure, start and, stop a server. + +If you are looking for the CLI tool, please got check out the cli [README](../bootstrap-cli/README.md). + +## Node client E2E via API: + +The lib can also be used as npm project (dev) dependency (`npm install --save-dev symbol-bootstrap-core`). + +Then you can integrate the network to your npm test cycle. + + +Example: + +```ts +import { BootstrapService, StartParams, Preset, Assembly } from 'symbol-bootstrap'; +import { expect } from '@oclif/test'; + +it('Bootstrap e2e test', async () => { + const service = new BootstrapService(); + const config: StartParams = { + preset: Preset.dualCurrency, + assembly: Assembly.multinode, + reset: true, + healthCheck: true, + timeout: 60000 * 5, + target: 'target/bootstrap-test', + detached: true, + user: 'current', + }; + try { + await service.stop(config); + const configResult = await service.start(config); + expect(configResult.presetData).not.null; + expect(configResult.addresses).not.null; + // Here you can write unit tests against a http://localhost:3000 network + } finally { + await service.stop(config); + } +}); +``` + +It's recommended to reuse the same server for multiple tests by using `beforeAll`, `afterAll` kind of statements. diff --git a/config/agent-cert/agent-ca.cnf b/packages/bootstrap-core/config/agent-cert/agent-ca.cnf similarity index 100% rename from config/agent-cert/agent-ca.cnf rename to packages/bootstrap-core/config/agent-cert/agent-ca.cnf diff --git a/config/agent-cert/agent-comm.cnf b/packages/bootstrap-core/config/agent-cert/agent-comm.cnf similarity index 100% rename from config/agent-cert/agent-comm.cnf rename to packages/bootstrap-core/config/agent-cert/agent-comm.cnf diff --git a/config/agent/agent.properties.mustache b/packages/bootstrap-core/config/agent/agent.properties.mustache similarity index 100% rename from config/agent/agent.properties.mustache rename to packages/bootstrap-core/config/agent/agent.properties.mustache diff --git a/config/cert/ca.cnf.mustache b/packages/bootstrap-core/config/cert/ca.cnf.mustache similarity index 100% rename from config/cert/ca.cnf.mustache rename to packages/bootstrap-core/config/cert/ca.cnf.mustache diff --git a/config/cert/node.cnf.mustache b/packages/bootstrap-core/config/cert/node.cnf.mustache similarity index 100% rename from config/cert/node.cnf.mustache rename to packages/bootstrap-core/config/cert/node.cnf.mustache diff --git a/packages/bootstrap-core/config/docker/explorer/run.sh.mustache b/packages/bootstrap-core/config/docker/explorer/run.sh.mustache new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/config/docker/explorer/run.sh.mustache @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/config/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/config/docker/mongo/mongoDbPrepare.js similarity index 100% rename from config/docker/mongo/mongoDbPrepare.js rename to packages/bootstrap-core/config/docker/mongo/mongoDbPrepare.js diff --git a/config/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/config/docker/mongo/scripts/mongoLockHashDbPrepare.js similarity index 100% rename from config/docker/mongo/scripts/mongoLockHashDbPrepare.js rename to packages/bootstrap-core/config/docker/mongo/scripts/mongoLockHashDbPrepare.js diff --git a/config/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/config/docker/mongo/scripts/mongoLockSecretDbPrepare.js similarity index 100% rename from config/docker/mongo/scripts/mongoLockSecretDbPrepare.js rename to packages/bootstrap-core/config/docker/mongo/scripts/mongoLockSecretDbPrepare.js diff --git a/config/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/config/docker/mongo/scripts/mongoMetadataDbPrepare.js similarity index 100% rename from config/docker/mongo/scripts/mongoMetadataDbPrepare.js rename to packages/bootstrap-core/config/docker/mongo/scripts/mongoMetadataDbPrepare.js diff --git a/config/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/config/docker/mongo/scripts/mongoMosaicDbPrepare.js similarity index 100% rename from config/docker/mongo/scripts/mongoMosaicDbPrepare.js rename to packages/bootstrap-core/config/docker/mongo/scripts/mongoMosaicDbPrepare.js diff --git a/config/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/config/docker/mongo/scripts/mongoMultisigDbPrepare.js similarity index 100% rename from config/docker/mongo/scripts/mongoMultisigDbPrepare.js rename to packages/bootstrap-core/config/docker/mongo/scripts/mongoMultisigDbPrepare.js diff --git a/config/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/config/docker/mongo/scripts/mongoNamespaceDbPrepare.js similarity index 100% rename from config/docker/mongo/scripts/mongoNamespaceDbPrepare.js rename to packages/bootstrap-core/config/docker/mongo/scripts/mongoNamespaceDbPrepare.js diff --git a/config/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/config/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js similarity index 100% rename from config/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js rename to packages/bootstrap-core/config/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js diff --git a/config/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/config/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js similarity index 100% rename from config/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js rename to packages/bootstrap-core/config/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js diff --git a/config/docker/server/start.sh b/packages/bootstrap-core/config/docker/server/start.sh similarity index 100% rename from config/docker/server/start.sh rename to packages/bootstrap-core/config/docker/server/start.sh diff --git a/packages/bootstrap-core/config/explorer/default.json.mustache b/packages/bootstrap-core/config/explorer/default.json.mustache new file mode 100644 index 000000000..7ff35d8dc --- /dev/null +++ b/packages/bootstrap-core/config/explorer/default.json.mustache @@ -0,0 +1,18 @@ +{ + "peersApi": { + "defaultNode": "{{defaultNode}}", + "nodes": {{{toJson restNodes}}} + }, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "{{namespaceName}}", + "mosaicId": "{{{toSimpleHex currencyMosaicId}}}", + "divisibility": "{{maxMosaicDivisibility}}", + "namespaceId": "{{{toSimpleHex namespaceId}}}", + "networkIdentifier": {{networkType}} + }, + "footer": {{{toJson footer}}} +} + diff --git a/config/hashes.dat b/packages/bootstrap-core/config/hashes.dat similarity index 100% rename from config/hashes.dat rename to packages/bootstrap-core/config/hashes.dat diff --git a/config/nemesis/block-properties-file.properties.mustache b/packages/bootstrap-core/config/nemesis/block-properties-file.properties.mustache similarity index 100% rename from config/nemesis/block-properties-file.properties.mustache rename to packages/bootstrap-core/config/nemesis/block-properties-file.properties.mustache diff --git a/config/node/resources/config-database.properties.mustache b/packages/bootstrap-core/config/node/resources/config-database.properties.mustache similarity index 100% rename from config/node/resources/config-database.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-database.properties.mustache diff --git a/config/node/resources/config-extensions-broker.properties.mustache b/packages/bootstrap-core/config/node/resources/config-extensions-broker.properties.mustache similarity index 100% rename from config/node/resources/config-extensions-broker.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-extensions-broker.properties.mustache diff --git a/config/node/resources/config-extensions-recovery.properties.mustache b/packages/bootstrap-core/config/node/resources/config-extensions-recovery.properties.mustache similarity index 100% rename from config/node/resources/config-extensions-recovery.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-extensions-recovery.properties.mustache diff --git a/config/node/resources/config-extensions-server.properties.mustache b/packages/bootstrap-core/config/node/resources/config-extensions-server.properties.mustache similarity index 100% rename from config/node/resources/config-extensions-server.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-extensions-server.properties.mustache diff --git a/config/node/resources/config-finalization.properties.mustache b/packages/bootstrap-core/config/node/resources/config-finalization.properties.mustache similarity index 100% rename from config/node/resources/config-finalization.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-finalization.properties.mustache diff --git a/config/node/resources/config-harvesting.properties.mustache b/packages/bootstrap-core/config/node/resources/config-harvesting.properties.mustache similarity index 100% rename from config/node/resources/config-harvesting.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-harvesting.properties.mustache diff --git a/config/node/resources/config-inflation.properties.mustache b/packages/bootstrap-core/config/node/resources/config-inflation.properties.mustache similarity index 100% rename from config/node/resources/config-inflation.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-inflation.properties.mustache diff --git a/config/node/resources/config-logging-broker.properties.mustache b/packages/bootstrap-core/config/node/resources/config-logging-broker.properties.mustache similarity index 100% rename from config/node/resources/config-logging-broker.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-logging-broker.properties.mustache diff --git a/config/node/resources/config-logging-recovery.properties.mustache b/packages/bootstrap-core/config/node/resources/config-logging-recovery.properties.mustache similarity index 100% rename from config/node/resources/config-logging-recovery.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-logging-recovery.properties.mustache diff --git a/config/node/resources/config-logging-server.properties.mustache b/packages/bootstrap-core/config/node/resources/config-logging-server.properties.mustache similarity index 100% rename from config/node/resources/config-logging-server.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-logging-server.properties.mustache diff --git a/config/node/resources/config-messaging.properties.mustache b/packages/bootstrap-core/config/node/resources/config-messaging.properties.mustache similarity index 100% rename from config/node/resources/config-messaging.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-messaging.properties.mustache diff --git a/config/node/resources/config-network.properties.mustache b/packages/bootstrap-core/config/node/resources/config-network.properties.mustache similarity index 100% rename from config/node/resources/config-network.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-network.properties.mustache diff --git a/config/node/resources/config-networkheight.properties.mustache b/packages/bootstrap-core/config/node/resources/config-networkheight.properties.mustache similarity index 100% rename from config/node/resources/config-networkheight.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-networkheight.properties.mustache diff --git a/config/node/resources/config-node.properties.mustache b/packages/bootstrap-core/config/node/resources/config-node.properties.mustache similarity index 100% rename from config/node/resources/config-node.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-node.properties.mustache diff --git a/config/node/resources/config-pt.properties.mustache b/packages/bootstrap-core/config/node/resources/config-pt.properties.mustache similarity index 100% rename from config/node/resources/config-pt.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-pt.properties.mustache diff --git a/config/node/resources/config-task.properties.mustache b/packages/bootstrap-core/config/node/resources/config-task.properties.mustache similarity index 100% rename from config/node/resources/config-task.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-task.properties.mustache diff --git a/config/node/resources/config-timesync.properties.mustache b/packages/bootstrap-core/config/node/resources/config-timesync.properties.mustache similarity index 100% rename from config/node/resources/config-timesync.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-timesync.properties.mustache diff --git a/config/node/resources/config-user.properties.mustache b/packages/bootstrap-core/config/node/resources/config-user.properties.mustache similarity index 100% rename from config/node/resources/config-user.properties.mustache rename to packages/bootstrap-core/config/node/resources/config-user.properties.mustache diff --git a/config/rest-gateway/rest.json.mustache b/packages/bootstrap-core/config/rest-gateway/rest.json.mustache similarity index 100% rename from config/rest-gateway/rest.json.mustache rename to packages/bootstrap-core/config/rest-gateway/rest.json.mustache diff --git a/config/wallet/app.conf.js.mustache b/packages/bootstrap-core/config/wallet/app.conf.js.mustache similarity index 100% rename from config/wallet/app.conf.js.mustache rename to packages/bootstrap-core/config/wallet/app.conf.js.mustache diff --git a/config/wallet/fees.conf.js.mustache b/packages/bootstrap-core/config/wallet/fees.conf.js.mustache similarity index 100% rename from config/wallet/fees.conf.js.mustache rename to packages/bootstrap-core/config/wallet/fees.conf.js.mustache diff --git a/config/wallet/network.conf.js.mustache b/packages/bootstrap-core/config/wallet/network.conf.js.mustache similarity index 100% rename from config/wallet/network.conf.js.mustache rename to packages/bootstrap-core/config/wallet/network.conf.js.mustache diff --git a/config/wallet/profileImporter.html b/packages/bootstrap-core/config/wallet/profileImporter.html similarity index 100% rename from config/wallet/profileImporter.html rename to packages/bootstrap-core/config/wallet/profileImporter.html diff --git a/packages/bootstrap-core/package-lock.json b/packages/bootstrap-core/package-lock.json new file mode 100644 index 000000000..e6ff564ea --- /dev/null +++ b/packages/bootstrap-core/package-lock.json @@ -0,0 +1,2901 @@ +{ + "name": "symbol-bootstrap-core", + "version": "1.1.0-alpha.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "symbol-bootstrap-core", + "version": "1.1.0-alpha.0", + "license": "Apache-2.0", + "dependencies": { + "archiver": "^5.3.0", + "handlebars": "^4.7.7", + "js-yaml": "^3.14.0", + "lodash": "^4.17.21", + "noble-ed25519": "^1.2.5", + "node-stream-zip": "^1.13.6", + "symbol-hd-wallets": "^0.14.1-alpha-202103052158", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "utf8": "^3.0.0", + "winston": "^3.3.3" + }, + "bin": { + "symbol-bootstrap-core": "lib/index.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@js-joda/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz", + "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==" + }, + "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/archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "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/base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "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/bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "engines": { + "node": "*" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bip32": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-1.0.4.tgz", + "integrity": "sha512-8T21eLWylZETolyqCPgia+MNp+kY37zFr7PTFDTPObHeNi9JlfG4qGIh8WzerIJidtwoK+NsWq2I5i66YfHoIw==", + "dependencies": { + "bs58check": "^2.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "tiny-secp256k1": "^1.0.0", + "typeforce": "^1.11.5", + "wif": "^2.0.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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/bip44-constants": { + "version": "8.0.103", + "resolved": "https://registry.npmjs.org/bip44-constants/-/bip44-constants-8.0.103.tgz", + "integrity": "sha512-wuGsY9IKUS9GC5Sf/Acb5jLJZI3Z8qsMoQHWldnQyoVUlij4y8e5srh28Iqul1HwK+elPsAYGNYKtYhovjvNxA==" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "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/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=" + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "node_modules/catbuffer-typescript": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/catbuffer-typescript/-/catbuffer-typescript-0.1.1.tgz", + "integrity": "sha512-r/z3UKG3YCCdsTEHRXGe3IQxA8OaBRBE31e9du2LOaLStGxYCmxUjfRtJ/DyKfgpS55fJPl3w/VFMnsfwIHmkA==" + }, + "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/color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "dependencies": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "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/crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=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/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "node_modules/fecha": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/futoin-hkdf": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz", + "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.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/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, + "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/js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "node_modules/logform": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "dependencies": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "triple-beam": "^1.3.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/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/merkletreejs": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.22.tgz", + "integrity": "sha512-MYWF5KoCkXcMkFtuB4O40k4yYxmhwb1TiaLvJaj1L5w4LQ66E2sukeslfJjGmaGqWHP4oMK06lgGZgODHxU3bw==", + "dependencies": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^3.1.9-1", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/merkletreejs/node_modules/crypto-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", + "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "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.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "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/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/noble-ed25519": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.2.5.tgz", + "integrity": "sha512-7vst+4UhM5QU3jJ3pUqPMKBCOePrxBojmoQa59qcSnYvjFF/T4jqb4WISlfslcWyBw7G5H9V/acpcAxMd8DzUQ==" + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-stream-zip": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.6.tgz", + "integrity": "sha512-c7tRSVkLNOHvasWgmZ2d86cDgTWEygnkuuHNOY9c0mR3yLZtQTTrGvMaJ/fPs6+LOJn3240y30l5sjLaXFtcvw==", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, + "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/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "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/printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "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/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "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/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-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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/simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "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/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "engines": { + "node": ">=0.10.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/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/symbol-hd-wallets": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/symbol-hd-wallets/-/symbol-hd-wallets-0.14.1.tgz", + "integrity": "sha512-jMYbVHlGtB9IiufME4nGDKEvYXz7e6YfBK0eulGhetMH/0TZ+qIomCmNaMU2EfJEeywo0Kb6TIMIN4AEq9ObBA==", + "dependencies": { + "bip32": "^1.0.4", + "bip39": "^3.0.2", + "bip44-constants": "^8.0.5", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "crypto-js": "^4.0.0", + "js-sha3": "^0.8.0", + "tiny-secp256k1": "^1.1.3", + "tweetnacl": "^1.0.3" + } + }, + "node_modules/symbol-openapi-typescript-fetch-client": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/symbol-openapi-typescript-fetch-client/-/symbol-openapi-typescript-fetch-client-0.11.2.tgz", + "integrity": "sha512-A1MAN8/UWlaCEibBf6zxkduZwDNSvWwLPp6JB0GeYI/FAOrw/9nLyuS/NJQ3siGAUclnuejH1wG7KdUg0/4RSw==" + }, + "node_modules/symbol-sdk": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-sdk/-/symbol-sdk-1.0.1.tgz", + "integrity": "sha512-G4sdGBfggTSqKs9XchMQAtOfl80Z2eARafxZnzje5qxzfUSQUCFYdBP7IJiA2PDoeyfXJJpzWWTlgq9EzvKm1A==", + "dependencies": { + "@js-joda/core": "^3.2.0", + "bluebird": "^3.7.2", + "catbuffer-typescript": "0.1.1", + "crypto-js": "^4.0.0", + "diff": "^4.0.2", + "futoin-hkdf": "^1.3.2", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "long": "^4.0.0", + "merkletreejs": "^0.2.9", + "minimist": "^1.2.5", + "node-fetch": "^2.6.0", + "ripemd160": "^2.0.2", + "rxjs": "^6.6.3", + "rxjs-compat": "^6.6.3", + "symbol-openapi-typescript-fetch-client": "0.11.2", + "tweetnacl": "^1.0.3", + "utf8": "^2.1.2", + "ws": "^7.3.1" + } + }, + "node_modules/symbol-sdk/node_modules/utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tiny-secp256k1": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz", + "integrity": "sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.3.0", + "bn.js": "^4.11.8", + "create-hmac": "^1.1.7", + "elliptic": "^6.4.0", + "nan": "^2.13.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/typeforce": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", + "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" + }, + "node_modules/uglify-js": { + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "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/web3-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.4.0.tgz", + "integrity": "sha512-b8mEhwh/J928Xk+SQFjtqrR2EGPhpknWLcIt9aCpVPVRXiqjUGo/kpOHKz0azu9c6/onEJ9tWXZt0cVjmH0N5Q==", + "dependencies": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.12.1", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wif": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", + "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", + "dependencies": { + "bs58check": "<3.0.0" + } + }, + "node_modules/winston": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "dependencies": { + "@dabh/diagnostics": "^2.0.2", + "async": "^3.1.0", + "is-stream": "^2.0.0", + "logform": "^2.2.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "dependencies": { + "readable-stream": "^2.3.7", + "triple-beam": "^1.2.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/winston-transport/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/winston-transport/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", + "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==", + "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/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + }, + "dependencies": { + "@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "@js-joda/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz", + "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==" + }, + "@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==" + }, + "archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "requires": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bip32": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-1.0.4.tgz", + "integrity": "sha512-8T21eLWylZETolyqCPgia+MNp+kY37zFr7PTFDTPObHeNi9JlfG4qGIh8WzerIJidtwoK+NsWq2I5i66YfHoIw==", + "requires": { + "bs58check": "^2.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "tiny-secp256k1": "^1.0.0", + "typeforce": "^1.11.5", + "wif": "^2.0.6" + } + }, + "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" + } + }, + "bip44-constants": { + "version": "8.0.103", + "resolved": "https://registry.npmjs.org/bip44-constants/-/bip44-constants-8.0.103.tgz", + "integrity": "sha512-wuGsY9IKUS9GC5Sf/Acb5jLJZI3Z8qsMoQHWldnQyoVUlij4y8e5srh28Iqul1HwK+elPsAYGNYKtYhovjvNxA==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "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" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "catbuffer-typescript": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/catbuffer-typescript/-/catbuffer-typescript-0.1.1.tgz", + "integrity": "sha512-r/z3UKG3YCCdsTEHRXGe3IQxA8OaBRBE31e9du2LOaLStGxYCmxUjfRtJ/DyKfgpS55fJPl3w/VFMnsfwIHmkA==" + }, + "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" + } + }, + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, + "crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "requires": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + } + }, + "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" + } + }, + "crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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" + } + }, + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "fecha": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "futoin-hkdf": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz", + "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==" + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "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" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "logform": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "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" + } + }, + "merkletreejs": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.22.tgz", + "integrity": "sha512-MYWF5KoCkXcMkFtuB4O40k4yYxmhwb1TiaLvJaj1L5w4LQ66E2sukeslfJjGmaGqWHP4oMK06lgGZgODHxU3bw==", + "requires": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^3.1.9-1", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "dependencies": { + "crypto-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", + "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + } + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "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.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "noble-ed25519": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.2.5.tgz", + "integrity": "sha512-7vst+4UhM5QU3jJ3pUqPMKBCOePrxBojmoQa59qcSnYvjFF/T4jqb4WISlfslcWyBw7G5H9V/acpcAxMd8DzUQ==" + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-stream-zip": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.6.tgz", + "integrity": "sha512-c7tRSVkLNOHvasWgmZ2d86cDgTWEygnkuuHNOY9c0mR3yLZtQTTrGvMaJ/fPs6+LOJn3240y30l5sjLaXFtcvw==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } + }, + "parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "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" + } + }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "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" + } + }, + "readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "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" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "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==" + }, + "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-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "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" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "symbol-hd-wallets": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/symbol-hd-wallets/-/symbol-hd-wallets-0.14.1.tgz", + "integrity": "sha512-jMYbVHlGtB9IiufME4nGDKEvYXz7e6YfBK0eulGhetMH/0TZ+qIomCmNaMU2EfJEeywo0Kb6TIMIN4AEq9ObBA==", + "requires": { + "bip32": "^1.0.4", + "bip39": "^3.0.2", + "bip44-constants": "^8.0.5", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "crypto-js": "^4.0.0", + "js-sha3": "^0.8.0", + "tiny-secp256k1": "^1.1.3", + "tweetnacl": "^1.0.3" + } + }, + "symbol-openapi-typescript-fetch-client": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/symbol-openapi-typescript-fetch-client/-/symbol-openapi-typescript-fetch-client-0.11.2.tgz", + "integrity": "sha512-A1MAN8/UWlaCEibBf6zxkduZwDNSvWwLPp6JB0GeYI/FAOrw/9nLyuS/NJQ3siGAUclnuejH1wG7KdUg0/4RSw==" + }, + "symbol-sdk": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-sdk/-/symbol-sdk-1.0.1.tgz", + "integrity": "sha512-G4sdGBfggTSqKs9XchMQAtOfl80Z2eARafxZnzje5qxzfUSQUCFYdBP7IJiA2PDoeyfXJJpzWWTlgq9EzvKm1A==", + "requires": { + "@js-joda/core": "^3.2.0", + "bluebird": "^3.7.2", + "catbuffer-typescript": "0.1.1", + "crypto-js": "^4.0.0", + "diff": "^4.0.2", + "futoin-hkdf": "^1.3.2", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "long": "^4.0.0", + "merkletreejs": "^0.2.9", + "minimist": "^1.2.5", + "node-fetch": "^2.6.0", + "ripemd160": "^2.0.2", + "rxjs": "^6.6.3", + "rxjs-compat": "^6.6.3", + "symbol-openapi-typescript-fetch-client": "0.11.2", + "tweetnacl": "^1.0.3", + "utf8": "^2.1.2", + "ws": "^7.3.1" + }, + "dependencies": { + "utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tiny-secp256k1": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz", + "integrity": "sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==", + "requires": { + "bindings": "^1.3.0", + "bn.js": "^4.11.8", + "create-hmac": "^1.1.7", + "elliptic": "^6.4.0", + "nan": "^2.13.2" + } + }, + "treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" + }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "typeforce": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", + "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" + }, + "uglify-js": { + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", + "optional": true + }, + "underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "web3-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.4.0.tgz", + "integrity": "sha512-b8mEhwh/J928Xk+SQFjtqrR2EGPhpknWLcIt9aCpVPVRXiqjUGo/kpOHKz0azu9c6/onEJ9tWXZt0cVjmH0N5Q==", + "requires": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.12.1", + "utf8": "3.0.0" + } + }, + "wif": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", + "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", + "requires": { + "bs58check": "<3.0.0" + } + }, + "winston": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "requires": { + "@dabh/diagnostics": "^2.0.2", + "async": "^3.1.0", + "is-stream": "^2.0.0", + "logform": "^2.2.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" + } + }, + "winston-transport": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "requires": { + "readable-stream": "^2.3.7", + "triple-beam": "^1.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", + "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==", + "requires": {} + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "requires": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "requires": { + "xhr-request": "^1.1.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + } + } + } +} diff --git a/packages/bootstrap-core/package.json b/packages/bootstrap-core/package.json new file mode 100644 index 000000000..4b648ef12 --- /dev/null +++ b/packages/bootstrap-core/package.json @@ -0,0 +1,55 @@ +{ + "name": "symbol-bootstrap-core", + "version": "1.1.0-alpha.0", + "description": "Symbol Typescript/Javascript Library that allows you creating, configuring and running Symbol's simple node networks or nodes to be sync with existing networks.", + "main": "lib/index.js", + "bin": "lib/index.js", + "types": "lib/index.js", + "homepage": "https://github.com/symbol/symbol-bootstrap", + "bugs": "https://github.com/symbol/symbol-bootstrap/issues", + "scripts": { + "doc": "shx mkdir -p ts-docs && typedoc --out \"ts-docs\" src && touch ./ts-docs/.nojekyll", + "clean": "npx shx rm -rf ./lib", + "purge": "npx shx rm -rf lib coverage node_modules target .nyc_output logs.log ts-docs", + "watch": "tsc -p tsconfig.build.json --watch", + "compile": "tsc -p tsconfig.build.json", + "build": "npx shx rm -rf lib && npm run compile", + "lib": "npm run clean && npm run compile", + "version": "echo $npm_package_version", + "prettier": "prettier --write ./src", + "lint": "eslint --cache src/ --ext .ts", + "prepack": "npx shx rm -rf lib && npm run compile", + "lint:fix": "eslint src/ --ext .ts --fix", + "style:fix": "npm run create-index-files && npm run prettier && npm run lint:fix", + "create-index-files": "cti create ./src -b -n -e commands", + "test": "nyc --reporter=lcov --extension .ts mocha -r ts-node/register --timeout 600000 --forbid-only \"test/**/*.test.ts\"" + }, + "files": [ + "/config", + "/presets", + "/lib" + ], + "keywords": [], + "author": "Fernando Boucquez ", + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + }, + "mocha": { + "timeout": 40000 + }, + "dependencies": { + "archiver": "^5.3.0", + "handlebars": "^4.7.7", + "js-yaml": "^3.14.0", + "lodash": "^4.17.21", + "noble-ed25519": "^1.2.5", + "node-stream-zip": "^1.13.6", + "symbol-hd-wallets": "^0.14.1-alpha-202103052158", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "utf8": "^3.0.0", + "winston": "^3.3.3" + }, + "gitHead": "b24acdda47ff73f56412c42b39f52dbf6d37686d" +} diff --git a/packages/bootstrap-core/presets/assemblies/assembly-api.yml b/packages/bootstrap-core/presets/assemblies/assembly-api.yml new file mode 100644 index 000000000..be0c23fad --- /dev/null +++ b/packages/bootstrap-core/presets/assemblies/assembly-api.yml @@ -0,0 +1,22 @@ +databases: + - name: 'db' + openPort: false +nodes: + - harvesting: false + api: true + name: 'node' + databaseHost: 'db' + brokerName: 'broker' + openPort: true + brokerOpenPort: false + trustedHosts: 127.0.0.1, 172.20.0.25 + localNetworks: 127.0.0.1, 172.20.0.25 +gateways: + - name: 'rest-gateway' + apiNodeName: 'node' + apiNodeHost: 'node' + apiNodeBrokerHost: 'broker' + description: '{{$networkDescription}}' + databaseHost: 'db' + openPort: true + ipv4_address: 172.20.0.25 diff --git a/packages/bootstrap-core/presets/assemblies/assembly-demo.yml b/packages/bootstrap-core/presets/assemblies/assembly-demo.yml new file mode 100644 index 000000000..f0897be59 --- /dev/null +++ b/packages/bootstrap-core/presets/assemblies/assembly-demo.yml @@ -0,0 +1,65 @@ +faucetUrl: http://localhost:100 +databases: + - name: 'db' + openPort: false +nodes: + - harvesting: true + api: true + name: 'node' + host: 'node' + databaseHost: 'db' + brokerName: 'broker' + openPort: true + brokerOpenPort: false + trustedHosts: 127.0.0.1, 172.20.0.25 + localNetworks: 127.0.0.1, 172.20.0.25 +gateways: + - name: 'rest-gateway' + apiNodeName: 'node' + apiNodeHost: 'node' + apiNodeBrokerHost: 'broker' + description: '{{$networkDescription}}' + databaseHost: 'db' + openPort: true + ipv4_address: 172.20.0.25 +wallets: + - name: 'wallet' + title: 'Symbol Bootstrap Wallet' + openPort: '80' +explorers: + - name: 'explorer' + openPort: '90' + footer: + link: + - href: https://nemflash.io/ + text: NEM News + icon: IconNewspaper + - href: https://forum.nem.io/ + text: Forum + icon: IconForum + - href: https://t.me/nemred + text: Telegram + icon: IconTelegram + - href: https://www.reddit.com/r/nem/ + text: Reddit + icon: IconReddit + - href: https://github.com/nemtech + text: Github + icon: IconGithub + - href: http://localhost:100/ + text: Faucet + icon: IconHomeCurrencyUsd +faucets: + - name: 'faucet' + gateway: 'rest-gateway' + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + openPort: '{{add $index 100}}' diff --git a/packages/bootstrap-core/presets/assemblies/assembly-dual.yml b/packages/bootstrap-core/presets/assemblies/assembly-dual.yml new file mode 100644 index 000000000..ca7399647 --- /dev/null +++ b/packages/bootstrap-core/presets/assemblies/assembly-dual.yml @@ -0,0 +1,22 @@ +databases: + - name: 'db' + openPort: false +nodes: + - harvesting: true + api: true + name: 'node' + databaseHost: 'db' + brokerName: 'broker' + openPort: true + brokerOpenPort: false + trustedHosts: 127.0.0.1, 172.20.0.25 + localNetworks: 127.0.0.1, 172.20.0.25 +gateways: + - name: 'rest-gateway' + apiNodeName: 'node' + apiNodeHost: 'node' + apiNodeBrokerHost: 'broker' + description: '{{$networkDescription}}' + databaseHost: 'db' + openPort: true + ipv4_address: 172.20.0.25 diff --git a/packages/bootstrap-core/presets/assemblies/assembly-multinode.yml b/packages/bootstrap-core/presets/assemblies/assembly-multinode.yml new file mode 100644 index 000000000..2d3f48851 --- /dev/null +++ b/packages/bootstrap-core/presets/assemblies/assembly-multinode.yml @@ -0,0 +1,90 @@ +explorerUrl: http://localhost:90 +faucetUrl: http://localhost:100 +databases: + - repeat: 1 + name: 'db-{{$index}}' + openPort: '{{add $index 27017}}' +nodes: + - repeat: 2 + harvesting: true + voting: true + api: false + name: 'peer-node-{{$index}}' + friendlyName: 'peer-node-{{$index}}' + host: 'peer-node-{{$index}}' + openPort: '{{add $index 7900}}' + - repeat: 1 + harvesting: false + api: true + friendlyName: 'api-node-{{$index}}' + name: 'api-node-{{$index}}' + host: 'api-node-{{$index}}' + brokerName: 'api-node-broker-{{$index}}' + brokerOpenPort: '{{add $index 8002}}' + databaseHost: 'db-{{$index}}' + trustedHosts: '127.0.0.1, 172.20.0.{{add $index 25}}' + localNetworks: '127.0.0.1, 172.20.0.{{add $index 25}}' +gateways: + - repeat: 1 + apiNodeName: 'api-node-{{$index}}' + apiNodeHost: 'api-node-{{$index}}' + apiNodeBrokerHost: 'api-node-broker-{{$index}}' + name: 'rest-gateway-{{$index}}' + description: '{{$networkDescription}}' + databaseHost: 'db-{{$index}}' + openPort: '{{add $index 3000}}' + ipv4_address: '172.20.0.{{add $index 25}}' +wallets: + - repeat: 0 + title: 'Symbol Bootstrap Wallet' + name: 'wallet-{{$index}}' + defaultNodeUrl: 'http://localhost:{{add $index 3000}}' + namespaceName: '{{baseNamespace}}.{{currencyName}}' + openPort: '{{add $index 80}}' + restNodes: + - friendlyName: 'Bootstrap Rest $index' + url: 'http://localhost:{{add $index 3000}}' + roles: 2 +explorers: + - repeat: 0 + name: 'explorer-{{$index}}' + defaultNode: 'http://localhost:{{add $index 3000}}' + namespaceName: '{{baseNamespace}}.{{currencyName}}' + openPort: '{{add $index 90}}' + restNodes: + - 'http://localhost:{{add $index 3000}}' + footer: + link: + - href: https://nemflash.io/ + text: NEM News + icon: IconNewspaper + - href: https://forum.nem.io/ + text: Forum + icon: IconForum + - href: https://t.me/nemred + text: Telegram + icon: IconTelegram + - href: https://www.reddit.com/r/nem/ + text: Reddit + icon: IconReddit + - href: https://github.com/nemtech + text: Github + icon: IconGithub + - href: http://localhost:100/ + text: Faucet + icon: IconHomeCurrencyUsd +faucets: + - repeat: 0 + name: 'faucet-{{$index}}' + gateway: 'rest-gateway-{{$index}}' + environment: + DEFAULT_NODE: 'http://rest-gateway-{{$index}}:{{add $index 3000}}' + DEFAULT_NODE_CLIENT: 'http://localhost:{{add $index 3000}}' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:{{add $index 90}}/' + openPort: '{{add $index 100}}' diff --git a/presets/mainnet/assembly-peer.yml b/packages/bootstrap-core/presets/assemblies/assembly-peer.yml similarity index 100% rename from presets/mainnet/assembly-peer.yml rename to packages/bootstrap-core/presets/assemblies/assembly-peer.yml diff --git a/presets/descriptions.yml b/packages/bootstrap-core/presets/descriptions.yml similarity index 100% rename from presets/descriptions.yml rename to packages/bootstrap-core/presets/descriptions.yml diff --git a/packages/bootstrap-core/presets/dualCurrency/network.yml b/packages/bootstrap-core/presets/dualCurrency/network.yml new file mode 100644 index 000000000..f90ce8d64 --- /dev/null +++ b/packages/bootstrap-core/presets/dualCurrency/network.yml @@ -0,0 +1,35 @@ +initialCurrencyAtomicUnits: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +totalChainImportance: 15000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +networkType: 152 +minVoterBalance: 50000 +baseNamespace: 'cat' +networkDescription: 'Symbol Local Bootstrap' +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +nemesis: + mosaics: + - name: 'currency' + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: 5 + - name: 'harvest' + divisibility: 3 + duration: 0 + supply: 15000000 + isTransferable: true + isSupplyMutable: true + isRestrictable: false + accounts: 2 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 diff --git a/packages/bootstrap-core/presets/mainnet/network.yml b/packages/bootstrap-core/presets/mainnet/network.yml new file mode 100644 index 000000000..556aacd1f --- /dev/null +++ b/packages/bootstrap-core/presets/mainnet/network.yml @@ -0,0 +1,1339 @@ +networkDescription: Symbol Mainnet +baseNamespace: symbol +batchVerificationRandomSource: /dev/urandom +currencyMosaicId: 6BED913FA20223F8 +harvestBeneficiaryPercentage: 25 +harvestingMosaicId: 6BED913FA20223F8 +epochAdjustment: 1615853185s +enableRevoteOnBoot: false +maxHarvesterBalance: 50000000000000 +maxMosaicAtomicUnits: 8999999999000000 +minHarvesterBalance: 10000000000 +minVoterBalance: 3000000000000 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +harvestNetworkFeeSinkAddress: NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI +namespaceRentalFeeSinkAddress: NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +mosaicRentalFeeSinkAddress: NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +nemesisSignerPublicKey: BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +networkType: 104 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: NDG2F6IHON7EDOXZCHSTSJ2YMUHDFXAQ2EUZHFA +rewardProgramControllerApiUrl: 'http://node-monitoring.symbolblockchain.io:7890' +totalChainImportance: 7842928625000000 +initialCurrencyAtomicUnits: 7842928625000000 +importanceGrouping: 720 +votingSetGrouping: 1440 +minVotingKeyLifetime: 112 +maxVotingKeyLifetime: 360 +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 224 +stepDuration: 5m +maxBlockFutureTime: 300ms +maxAccountRestrictionValues: 100 +maxSecretLockDuration: 365d +maxNamespaceDuration: 1825d +minNamespaceDuration: 30d +namespaceGracePeriodDuration: 30d +blockGenerationTargetTime: 30s +defaultDynamicFeeMultiplier: 100 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +mosaicRentalFee: 500000 +throttlingBurst: 80 +throttlingRate: 60 +fileDatabaseBatchSize: 100 +minProofSize: 0 +syncTimeout: 5m +maxChildNamespaces: 100 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +timeSynchronizationMinImportance: 10000000000 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-001.symbolblockchain.io:3000' + - 'http://ngl-dual-002.symbolblockchain.io:3000' + - 'http://ngl-dual-003.symbolblockchain.io:3000' + - 'http://ngl-dual-004.symbolblockchain.io:3000' + - 'http://ngl-dual-101.symbolblockchain.io:3000' + - 'http://ngl-dual-102.symbolblockchain.io:3000' + - 'http://ngl-dual-103.symbolblockchain.io:3000' + - 'http://ngl-dual-104.symbolblockchain.io:3000' + - 'http://ngl-dual-201.symbolblockchain.io:3000' + - 'http://ngl-dual-202.symbolblockchain.io:3000' + - 'http://ngl-dual-203.symbolblockchain.io:3000' + - 'http://ngl-dual-204.symbolblockchain.io:3000' + - 'http://ngl-dual-301.symbolblockchain.io:3000' + - 'http://ngl-dual-302.symbolblockchain.io:3000' + - 'http://ngl-dual-303.symbolblockchain.io:3000' + - 'http://ngl-dual-304.symbolblockchain.io:3000' + - 'http://ngl-dual-401.symbolblockchain.io:3000' + - 'http://ngl-dual-402.symbolblockchain.io:3000' + - 'http://ngl-dual-403.symbolblockchain.io:3000' + - 'http://ngl-dual-404.symbolblockchain.io:3000' + - 'http://ngl-dual-501.symbolblockchain.io:3000' + - 'http://ngl-dual-502.symbolblockchain.io:3000' + - 'http://ngl-dual-503.symbolblockchain.io:3000' + - 'http://ngl-dual-504.symbolblockchain.io:3000' + - 'http://ngl-dual-601.symbolblockchain.io:3000' + - 'http://ngl-dual-602.symbolblockchain.io:3000' + - 'http://ngl-dual-603.symbolblockchain.io:3000' + - 'http://ngl-dual-604.symbolblockchain.io:3000' + - 'http://ngl-dual-005.symbolblockchain.io:3000' + - 'http://ngl-dual-006.symbolblockchain.io:3000' + - 'http://ngl-dual-105.symbolblockchain.io:3000' + - 'http://ngl-dual-106.symbolblockchain.io:3000' + - 'http://ngl-dual-205.symbolblockchain.io:3000' + - 'http://ngl-dual-206.symbolblockchain.io:3000' + - 'http://ngl-dual-305.symbolblockchain.io:3000' + - 'http://ngl-dual-306.symbolblockchain.io:3000' + - 'http://ngl-dual-405.symbolblockchain.io:3000' + - 'http://ngl-dual-406.symbolblockchain.io:3000' + - 'http://ngl-dual-505.symbolblockchain.io:3000' + - 'http://ngl-dual-506.symbolblockchain.io:3000' + - 'http://ngl-dual-605.symbolblockchain.io:3000' + - 'http://ngl-dual-606.symbolblockchain.io:3000' + - 'http://ngl-api-001.symbolblockchain.io:3000' + - 'http://ngl-api-301.symbolblockchain.io:3000' + - 'http://ngl-api-401.symbolblockchain.io:3000' + - 'http://ngl-api-501.symbolblockchain.io:3000' + - 'http://ngl-api-601.symbolblockchain.io:3000' +knownPeers: + api-node: + - + publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - + publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - + publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - + publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - + publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - + publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - + publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - + publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - + publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - + publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - + publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - + publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - + publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - + publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - + publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - + publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - + publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - + publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - + publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - + publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - + publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - + publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - + publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - + publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - + publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - + publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - + publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - + publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - + publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - + publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - + publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - + publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - + publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - + publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - + publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - + publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - + publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - + publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - + publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - + publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - + publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - + publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api + peer-node: + - + publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - + publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - + publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - + publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - + publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - + publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - + publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - + publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - + publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - + publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - + publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - + publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - + publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - + publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - + publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - + publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - + publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - + publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - + publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - + publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - + publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - + publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - + publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - + publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - + publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - + publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - + publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - + publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - + publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - + publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - + publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - + publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - + publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - + publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - + publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - + publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - + publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - + publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - + publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - + publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - + publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - + publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - + publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - + publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - + publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 diff --git a/presets/mainnet/seed/00000/00001.dat b/packages/bootstrap-core/presets/mainnet/seed/00000/00001.dat similarity index 100% rename from presets/mainnet/seed/00000/00001.dat rename to packages/bootstrap-core/presets/mainnet/seed/00000/00001.dat diff --git a/presets/mainnet/seed/00000/00001.proof b/packages/bootstrap-core/presets/mainnet/seed/00000/00001.proof similarity index 100% rename from presets/mainnet/seed/00000/00001.proof rename to packages/bootstrap-core/presets/mainnet/seed/00000/00001.proof diff --git a/presets/mainnet/seed/00000/00001.stmt b/packages/bootstrap-core/presets/mainnet/seed/00000/00001.stmt similarity index 100% rename from presets/mainnet/seed/00000/00001.stmt rename to packages/bootstrap-core/presets/mainnet/seed/00000/00001.stmt diff --git a/presets/mainnet/seed/00000/hashes.dat b/packages/bootstrap-core/presets/mainnet/seed/00000/hashes.dat similarity index 100% rename from presets/mainnet/seed/00000/hashes.dat rename to packages/bootstrap-core/presets/mainnet/seed/00000/hashes.dat diff --git a/presets/mainnet/seed/00000/proof.heights.dat b/packages/bootstrap-core/presets/mainnet/seed/00000/proof.heights.dat similarity index 100% rename from presets/mainnet/seed/00000/proof.heights.dat rename to packages/bootstrap-core/presets/mainnet/seed/00000/proof.heights.dat diff --git a/presets/mainnet/seed/index.dat b/packages/bootstrap-core/presets/mainnet/seed/index.dat similarity index 100% rename from presets/mainnet/seed/index.dat rename to packages/bootstrap-core/presets/mainnet/seed/index.dat diff --git a/presets/mainnet/seed/proof.index.dat b/packages/bootstrap-core/presets/mainnet/seed/proof.index.dat similarity index 100% rename from presets/mainnet/seed/proof.index.dat rename to packages/bootstrap-core/presets/mainnet/seed/proof.index.dat diff --git a/presets/shared.yml b/packages/bootstrap-core/presets/shared.yml similarity index 98% rename from presets/shared.yml rename to packages/bootstrap-core/presets/shared.yml index 9cb07a454..7c2e9a020 100644 --- a/presets/shared.yml +++ b/packages/bootstrap-core/presets/shared.yml @@ -66,9 +66,9 @@ maxNamespaceDepth: 3 batchVerificationRandomSource: symbolServerImage: symbolplatform/symbol-server:gcc-10-1.0.1.0 symbolRestImage: symbolplatform/symbol-rest:2.3.6 -symbolExplorerImage: symbolplatform/symbol-explorer:0.6.3-alpha +symbolExplorerImage: symbolplatform/symbol-explorer:1.1.0-alpha symbolWalletImage: symbolplatform/symbol-desktop-wallet:1.0.1 -symbolFaucetImage: symbolplatform/symbol-faucet:0.5.0-alpha +symbolFaucetImage: symbolplatform/symbol-faucet:1.0.1-alpha symbolAgentImage: symbolplatform/symbol-node-rewards-agent:2.0.0 mongoImage: mongo:4.4.3-bionic mongoComposeRunParam: --wiredTigerCacheSizeGB 2 diff --git a/packages/bootstrap-core/presets/singleCurrency/network.yml b/packages/bootstrap-core/presets/singleCurrency/network.yml new file mode 100644 index 000000000..edb937237 --- /dev/null +++ b/packages/bootstrap-core/presets/singleCurrency/network.yml @@ -0,0 +1,27 @@ +initialCurrencyAtomicUnits: 8998999998000000 +totalChainImportance: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +networkType: 152 +minVoterBalance: 50000 +baseNamespace: 'cat' +networkDescription: 'Symbol Local Bootstrap' +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +nemesis: + mosaics: + - name: 'currency' + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: 5 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 diff --git a/packages/bootstrap-core/presets/testnet/network.yml b/packages/bootstrap-core/presets/testnet/network.yml new file mode 100644 index 000000000..90c4f2b95 --- /dev/null +++ b/packages/bootstrap-core/presets/testnet/network.yml @@ -0,0 +1,705 @@ +assemblies: 'api, dual, peer' +networkDescription: Symbol Testnet +baseNamespace: symbol +batchVerificationRandomSource: /dev/urandom +currencyMosaicId: 091F837E059AE13C +harvestBeneficiaryPercentage: 25 +harvestingMosaicId: 091F837E059AE13C +epochAdjustment: 1616694977s +enableRevoteOnBoot: false +maxHarvesterBalance: 50000000000000 +maxMosaicAtomicUnits: 8999999999000000 +minHarvesterBalance: 10000000000 +minVoterBalance: 3000000000000 +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA +namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +networkType: 152 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ +rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' +totalChainImportance: 7842928625000000 +initialCurrencyAtomicUnits: 7842928625000000 +importanceGrouping: 180 +votingSetGrouping: 720 +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 311 +minVotingKeyLifetime: 28 +maxVotingKeyLifetime: 720 +stepDuration: 4m +maxBlockFutureTime: 300ms +maxAccountRestrictionValues: 100 +maxSecretLockDuration: 365d +maxNamespaceDuration: 1825d +minNamespaceDuration: 30d +namespaceGracePeriodDuration: 1d +blockGenerationTargetTime: 30s +defaultDynamicFeeMultiplier: 100 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +mosaicRentalFee: 500000 +throttlingBurst: 80 +throttlingRate: 60 +fileDatabaseBatchSize: 100 +minProofSize: 0 +syncTimeout: 5m +maxChildNamespaces: 100 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +timeSynchronizationMinImportance: 10000000000 +faucetUrl: 'http://faucet.testnet.symboldev.network' +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-501.testnet.symboldev.network:3000' + - 'http://ngl-dual-601.testnet.symboldev.network:3000' + - 'http://ngl-dual-001.testnet.symboldev.network:3000' + - 'http://ngl-dual-101.testnet.symboldev.network:3000' + - 'http://ngl-dual-201.testnet.symboldev.network:3000' + - 'http://ngl-dual-301.testnet.symboldev.network:3000' + - 'http://ngl-dual-401.testnet.symboldev.network:3000' + - 'http://ngl-dual-502.testnet.symboldev.network:3000' + - 'http://ngl-dual-602.testnet.symboldev.network:3000' + - 'http://ngl-api-001.testnet.symboldev.network:3000' + - 'http://ngl-api-101.testnet.symboldev.network:3000' +knownPeers: + api-node: + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api + peer-node: + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 diff --git a/presets/testnet/seed/00000/00001.dat b/packages/bootstrap-core/presets/testnet/seed/00000/00001.dat similarity index 100% rename from presets/testnet/seed/00000/00001.dat rename to packages/bootstrap-core/presets/testnet/seed/00000/00001.dat diff --git a/presets/testnet/seed/00000/00001.proof b/packages/bootstrap-core/presets/testnet/seed/00000/00001.proof similarity index 100% rename from presets/testnet/seed/00000/00001.proof rename to packages/bootstrap-core/presets/testnet/seed/00000/00001.proof diff --git a/presets/testnet/seed/00000/00001.stmt b/packages/bootstrap-core/presets/testnet/seed/00000/00001.stmt similarity index 100% rename from presets/testnet/seed/00000/00001.stmt rename to packages/bootstrap-core/presets/testnet/seed/00000/00001.stmt diff --git a/presets/testnet/seed/00000/hashes.dat b/packages/bootstrap-core/presets/testnet/seed/00000/hashes.dat similarity index 100% rename from presets/testnet/seed/00000/hashes.dat rename to packages/bootstrap-core/presets/testnet/seed/00000/hashes.dat diff --git a/presets/testnet/seed/00000/proof.heights.dat b/packages/bootstrap-core/presets/testnet/seed/00000/proof.heights.dat similarity index 100% rename from presets/testnet/seed/00000/proof.heights.dat rename to packages/bootstrap-core/presets/testnet/seed/00000/proof.heights.dat diff --git a/presets/testnet/seed/index.dat b/packages/bootstrap-core/presets/testnet/seed/index.dat similarity index 100% rename from presets/testnet/seed/index.dat rename to packages/bootstrap-core/presets/testnet/seed/index.dat diff --git a/presets/testnet/seed/proof.index.dat b/packages/bootstrap-core/presets/testnet/seed/proof.index.dat similarity index 100% rename from presets/testnet/seed/proof.index.dat rename to packages/bootstrap-core/presets/testnet/seed/proof.index.dat diff --git a/src/index.ts b/packages/bootstrap-core/src/index.ts similarity index 100% rename from src/index.ts rename to packages/bootstrap-core/src/index.ts diff --git a/src/logger/LogType.ts b/packages/bootstrap-core/src/logger/LogType.ts similarity index 91% rename from src/logger/LogType.ts rename to packages/bootstrap-core/src/logger/LogType.ts index 05da798ee..cf7d605db 100644 --- a/src/logger/LogType.ts +++ b/packages/bootstrap-core/src/logger/LogType.ts @@ -15,6 +15,7 @@ */ export enum LogType { - Audit = 'AUDIT_LOG', + Console = 'CONSOLE', + ConsoleLog = 'CONSOLE_LOG', System = 'SYSTEM_LOG', } diff --git a/packages/bootstrap-core/src/logger/Logger.ts b/packages/bootstrap-core/src/logger/Logger.ts new file mode 100644 index 000000000..7625c4f30 --- /dev/null +++ b/packages/bootstrap-core/src/logger/Logger.ts @@ -0,0 +1,27 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Logger { + error: LeveledLogMethod; + warn: LeveledLogMethod; + info: LeveledLogMethod; + debug: LeveledLogMethod; +} + +interface LeveledLogMethod { + (message: string, ...meta: any[]): Logger; + (message: any): Logger; +} diff --git a/packages/bootstrap-core/src/logger/LoggerFactory.ts b/packages/bootstrap-core/src/logger/LoggerFactory.ts new file mode 100644 index 000000000..18bf2ef3c --- /dev/null +++ b/packages/bootstrap-core/src/logger/LoggerFactory.ts @@ -0,0 +1,77 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { join, resolve } from 'path'; +import * as winston from 'winston'; +import { FileTransportInstance } from 'winston/lib/winston/transports'; +import { Logger } from './Logger'; +import { LogType } from './LogType'; + +export class LoggerFactory { + private static readonly consoleTransport = new winston.transports.Console({ + format: winston.format.combine( + winston.format.timestamp(), + winston.format.cli(), + winston.format.printf((i) => `${i.timestamp} ${i.level} ${i.message}`), + ), + }); + + private static readonly consoleOnlyTransport = new winston.transports.Console({ + format: winston.format.combine(winston.format.printf((i) => `${i.message}`)), + }); + + private static readonly fileTransport = (fileName: string): FileTransportInstance => + new winston.transports.File({ + format: winston.format.combine( + winston.format.timestamp(), + winston.format.printf((i) => `${i.timestamp} ${i.level} ${i.message}`), + ), + options: { flags: 'w' }, + filename: resolve(fileName), + level: 'info', + }); + + public static getLogger(id: LogType, workingDir?: string): Logger { + if (!winston.loggers.has(id.toString())) { + if (id === LogType.System) { + if (!workingDir) { + throw new Error('Working dir must be provided when using LogType.SYSTEM!'); + } + winston.loggers.add(id.toString(), { + transports: [LoggerFactory.consoleTransport, LoggerFactory.fileTransport(join(workingDir, 'logs.log'))], + format: winston.format.label({ label: id.toString() }), + }); + } else { + if (id === LogType.Console) { + winston.loggers.add(id.toString(), { + transports: [LoggerFactory.consoleOnlyTransport], + format: winston.format.label({ label: id.toString() }), + }); + } else { + if (id === LogType.ConsoleLog) { + winston.loggers.add(id.toString(), { + transports: [LoggerFactory.consoleTransport], + format: winston.format.label({ label: id.toString() }), + }); + } else { + throw new Error(`Unknown LogType ${id}`); + } + } + } + } + return winston.loggers.get(id.toString()); + } +} diff --git a/src/logger/index.ts b/packages/bootstrap-core/src/logger/index.ts similarity index 100% rename from src/logger/index.ts rename to packages/bootstrap-core/src/logger/index.ts diff --git a/src/model/Addresses.ts b/packages/bootstrap-core/src/model/Addresses.ts similarity index 93% rename from src/model/Addresses.ts rename to packages/bootstrap-core/src/model/Addresses.ts index e3d75c6e6..3fcd4b7e3 100644 --- a/src/model/Addresses.ts +++ b/packages/bootstrap-core/src/model/Addresses.ts @@ -48,16 +48,20 @@ export interface NodeAccount { export interface MosaicAccounts { name: string; id: string; - type: 'currency' | 'harvest'; accounts: ConfigAccount[]; } +export interface FaucetAccounts { + account?: ConfigAccount; +} + export interface Addresses { version: number; nodes?: NodeAccount[]; nemesisGenerationHashSeed: string; - sinkAddress: string; + sinkAddress?: string; nemesisSigner?: ConfigAccount; networkType: NetworkType; mosaics?: MosaicAccounts[]; + faucets?: FaucetAccounts[]; } diff --git a/src/model/ConfigPreset.ts b/packages/bootstrap-core/src/model/ConfigPreset.ts similarity index 94% rename from src/model/ConfigPreset.ts rename to packages/bootstrap-core/src/model/ConfigPreset.ts index bd6e3a9b7..763ca5b47 100644 --- a/src/model/ConfigPreset.ts +++ b/packages/bootstrap-core/src/model/ConfigPreset.ts @@ -15,7 +15,7 @@ */ import { NetworkType } from 'symbol-sdk'; -import { Preset, RewardProgram } from '../service'; +import { RewardProgram } from '../service'; import { NodeType } from './NodeType'; export enum PrivateKeySecurityMode { @@ -30,11 +30,16 @@ export interface DockerServicePreset { openPort?: boolean | number | string; host?: string; excludeDockerService?: boolean; - environment?: any; + environment?: Record; compose?: any; dockerComposeDebugMode?: boolean; } +export interface CurrencyDistribution { + address: string; + amount: number; +} + export interface MosaicPreset { name: string; repeat?: number; @@ -46,8 +51,9 @@ export interface MosaicPreset { isTransferable: boolean; isSupplyMutable: boolean; isRestrictable: boolean; - accounts: number; - currencyDistributions: { address: string; amount: number }[]; + // string[] are provided public keys for unit test. + accounts: number | string[]; + currencyDistributions: CurrencyDistribution[]; } export interface DatabasePreset extends DockerServicePreset { @@ -58,8 +64,7 @@ export interface DatabasePreset extends DockerServicePreset { export interface NemesisPreset { binDirectory: string; - mosaics?: MosaicPreset[]; - balances?: Record; + mosaics: MosaicPreset[]; transactions?: Record; nemesisSignerPrivateKey: string; transactionsDirectory: string; @@ -262,6 +267,7 @@ export interface NodePreset extends DockerServicePreset, Partial = { export interface CommonConfigPreset extends NodeConfigPreset, GatewayConfigPreset { version: number; // file version bootstrapVersion: number; - preset: Preset; + preset: string; assembly: string; - assemblies?: string; privateKeySecurityMode?: string; votingKeysDirectory: string; sinkAddress?: string; @@ -411,10 +423,13 @@ export interface CommonConfigPreset extends NodeConfigPreset, GatewayConfigPrese namespaceRentalFeeSinkAddress?: string; networkIdentifier: string; networkName: string; + networkDescription: string; currencyMosaicId: string; harvestingMosaicId: string; baseNamespace: string; rewardProgramEnrollmentAddress?: string; + rewardProgramControllerApiUrl?: string; + rewardProgramCaFile?: string; networkType: NetworkType; votingKeyDesiredLifetime: number; votingKeyDesiredFutureLifetime: number; // How in the future voting key files need to be generated. By default, 1 months before expiring.. @@ -429,13 +444,14 @@ export interface CommonConfigPreset extends NodeConfigPreset, GatewayConfigPrese export interface ConfigPreset extends CommonConfigPreset { // Nested objects! - nemesis?: NemesisPreset; + nemesis: NemesisPreset; databases?: DatabasePreset[]; nodes?: NodePreset[]; gateways?: GatewayPreset[]; explorers?: ExplorerPreset[]; wallets?: WalletPreset[]; faucets?: FaucetPreset[]; + customPresetCache?: CustomPreset; } export interface CustomPreset extends Partial { diff --git a/src/model/DockerCompose.ts b/packages/bootstrap-core/src/model/DockerCompose.ts similarity index 98% rename from src/model/DockerCompose.ts rename to packages/bootstrap-core/src/model/DockerCompose.ts index 632ea0f5d..aad29a971 100644 --- a/src/model/DockerCompose.ts +++ b/packages/bootstrap-core/src/model/DockerCompose.ts @@ -28,6 +28,7 @@ export interface DockerComposeService { user?: string; working_dir?: string; command?: string; + entrypoint?: string; hostname?: string; environment?: any; stop_signal?: string; diff --git a/src/model/NodeType.ts b/packages/bootstrap-core/src/model/NodeType.ts similarity index 100% rename from src/model/NodeType.ts rename to packages/bootstrap-core/src/model/NodeType.ts diff --git a/src/model/index.ts b/packages/bootstrap-core/src/model/index.ts similarity index 100% rename from src/model/index.ts rename to packages/bootstrap-core/src/model/index.ts diff --git a/packages/bootstrap-core/src/service/AccountResolver.ts b/packages/bootstrap-core/src/service/AccountResolver.ts new file mode 100644 index 000000000..a1ed5fe2d --- /dev/null +++ b/packages/bootstrap-core/src/service/AccountResolver.ts @@ -0,0 +1,64 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Account, Address, NetworkType, SignedTransaction, Transaction } from 'symbol-sdk'; +import { CertificatePair, KeyName } from '../'; + +export interface AccountResolver { + resolveAccount( + networkType: NetworkType, + account: CertificatePair | undefined, + keyName: KeyName, + nodeName: string, + operationDescription: string, + generateErrorMessage: string | undefined, + ): Promise; + + shouldAnnounce(transaction: Transaction, signedTransaction: SignedTransaction, transactionDescription: string): Promise; + + resolveCosigners(networkType: NetworkType, expectedAddresses: Address[], minApproval: number): Promise; +} + +export class DefaultAccountResolver implements AccountResolver { + async shouldAnnounce(): Promise { + return true; + } + resolveCosigners(): Promise { + throw new Error('Cosigners not implemented'); + } + async resolveAccount( + networkType: NetworkType, + account: CertificatePair | undefined, + keyName: KeyName, + nodeName: string, + operationDescription: string, + generateErrorMessage: string | undefined, + ): Promise { + if (!account) { + if (generateErrorMessage) { + throw new Error(generateErrorMessage); + } + return this.generateNewAccount(networkType); + } + if (account?.privateKey) { + return Account.createFromPrivateKey(account.privateKey, networkType); + } + throw new Error('Private key not provided'); + } + + generateNewAccount(networkType: NetworkType): Account { + return Account.generateNewAccount(networkType); + } +} diff --git a/src/service/AgentCertificateService.ts b/packages/bootstrap-core/src/service/AgentCertificateService.ts similarity index 79% rename from src/service/AgentCertificateService.ts rename to packages/bootstrap-core/src/service/AgentCertificateService.ts index 3ddabf0d7..18ec99535 100644 --- a/src/service/AgentCertificateService.ts +++ b/packages/bootstrap-core/src/service/AgentCertificateService.ts @@ -17,21 +17,20 @@ import { existsSync } from 'fs'; import { join, resolve } from 'path'; import { NetworkType } from 'symbol-sdk'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; +import { Logger } from '../logger'; import { CertificatePair } from '../model'; +import { AccountResolver } from './AccountResolver'; import { BootstrapUtils } from './BootstrapUtils'; import { CertificateService } from './CertificateService'; -import { CommandUtils } from './CommandUtils'; import { KeyName } from './ConfigService'; export interface AgentCertificateParams { readonly target: string; readonly user: string; + readonly accountResolver: AccountResolver; } export interface AgentCertificates { - agent: CertificatePair; + readonly agent: CertificatePair; } export interface AgentCertificateMetadata { @@ -39,11 +38,9 @@ export interface AgentCertificateMetadata { readonly version: number; } -const logger: Logger = LoggerFactory.getLogger(LogType.System); - export class AgentCertificateService { private static readonly METADATA_VERSION = 1; - constructor(private readonly root: string, protected readonly params: AgentCertificateParams) {} + constructor(private readonly logger: Logger, protected readonly params: AgentCertificateParams) {} public async run( networkType: NetworkType, @@ -52,16 +49,16 @@ export class AgentCertificateService { providedCertificates: AgentCertificates, customCertFolder?: string, ): Promise { - const copyFrom = `${this.root}/config/agent-cert`; + const copyFrom = join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'config', 'agent-cert'); const certFolder = customCertFolder || BootstrapUtils.getTargetNodesFolder(this.params.target, false, name, 'agent'); await BootstrapUtils.mkdir(certFolder); const metadataFile = join(certFolder, 'metadata.yml'); if (!(await this.shouldGenerateCertificate(metadataFile, providedCertificates))) { - logger.info(`Agent Certificates for node ${name} have been previously generated. Reusing...`); + this.logger.info(`Agent Certificates for node ${name} have been previously generated. Reusing...`); return; } - await BootstrapUtils.deleteFolder(certFolder); + await BootstrapUtils.deleteFolder(this.logger, certFolder); await BootstrapUtils.mkdir(certFolder); const newCertsFolder = join(certFolder, 'new_certs'); await BootstrapUtils.mkdir(newCertsFolder); @@ -69,21 +66,22 @@ export class AgentCertificateService { const generatedContext = { name }; await BootstrapUtils.generateConfiguration(generatedContext, copyFrom, certFolder, []); - const agentPrivateKey = await CommandUtils.resolvePrivateKey( + const agentAccount = await this.params.accountResolver.resolveAccount( networkType, providedCertificates.agent, KeyName.Agent, name, 'generating the Agent certificates', + 'Should not generate!', ); - BootstrapUtils.createDerFile(agentPrivateKey, join(certFolder, 'agent-ca.der')); + BootstrapUtils.createDerFile(agentAccount.privateKey, join(certFolder, 'agent-ca.der')); const command = this.createCertCommands('/data'); await BootstrapUtils.writeTextFile(join(certFolder, 'createAgentCertificate.sh'), command); const cmd = ['bash', 'createAgentCertificate.sh']; const binds = [`${resolve(certFolder)}:/data:rw`]; - const userId = await BootstrapUtils.resolveDockerUserFromParam(this.params.user); - const { stdout, stderr } = await BootstrapUtils.runImageUsingExec({ + const userId = await BootstrapUtils.resolveDockerUserFromParam(this.logger, this.params.user); + const { stdout, stderr } = await BootstrapUtils.runImageUsingExec(this.logger, { image: symbolServerImage, userId: userId, workdir: '/data', @@ -91,8 +89,8 @@ export class AgentCertificateService { binds: binds, }); if (stdout.indexOf('Certificate Created') < 0) { - logger.info(BootstrapUtils.secureString(stdout)); - logger.error(BootstrapUtils.secureString(stderr)); + this.logger.info(BootstrapUtils.secureString(stdout)); + this.logger.error(BootstrapUtils.secureString(stderr)); throw new Error('Certificate creation failed. Check the logs!'); } @@ -101,9 +99,9 @@ export class AgentCertificateService { throw new Error('Certificate creation failed. 1 certificates should have been created but got: ' + certificates.length); } const agentCertificate = certificates[0]; - BootstrapUtils.validateIsTrue(agentCertificate.privateKey === agentPrivateKey, 'Invalid agent private key'); + BootstrapUtils.validateIsTrue(agentCertificate.privateKey === agentAccount.privateKey, 'Invalid agent private key'); BootstrapUtils.validateIsTrue(agentCertificate.publicKey === providedCertificates.agent.publicKey, 'Invalid agent public key'); - logger.info(`Agent Certificate for node ${name} created`); + this.logger.info(`Agent Certificate for node ${name} created`); const metadata: AgentCertificateMetadata = { version: AgentCertificateService.METADATA_VERSION, agentPublicKey: providedCertificates.agent.publicKey, @@ -115,13 +113,13 @@ export class AgentCertificateService { return true; } try { - const metadata = BootstrapUtils.loadYaml(metadataFile, false) as AgentCertificateMetadata; + const metadata = (await BootstrapUtils.loadYaml(metadataFile, false)) as AgentCertificateMetadata; return ( metadata.agentPublicKey !== providedCertificates.agent.publicKey || metadata.version !== AgentCertificateService.METADATA_VERSION ); } catch (e) { - logger.warn(`Cannot load agent certificate metadata from file ${metadataFile}. Error: ${e.message}`, e); + this.logger.warn(`Cannot load agent certificate metadata from file ${metadataFile}. Error: ${e.message}`, e); return true; } } @@ -139,7 +137,7 @@ export class AgentCertificateService { // const storedPublicKey = Convert.uint8ToHex((key.part as any).A.data); // return storedPublicKey !== providedCertificates.agent.publicKey; // } catch (e) { - // logger.warn(`Cannot extract public key from file ${pemFile}. Error: ${e.message}`, e); + // this.logger.warn(`Cannot extract public key from file ${pemFile}. Error: ${e.message}`, e); // return true; // } // } @@ -163,6 +161,8 @@ openssl req -config agent-ca.cnf -key agent-ca.key.pem -new -out agent-ca.csr.pe rm createAgentCertificate.sh rm agent-ca.der +rm -rf new_certs +rm index.txt* echo "Certificate Created" `; diff --git a/packages/bootstrap-core/src/service/AnnounceService.ts b/packages/bootstrap-core/src/service/AnnounceService.ts new file mode 100644 index 000000000..41075fe0b --- /dev/null +++ b/packages/bootstrap-core/src/service/AnnounceService.ts @@ -0,0 +1,398 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { + Account, + AccountInfo, + Address, + AggregateTransaction, + Deadline, + LockFundsTransaction, + MosaicId, + MultisigAccountInfo, + PublicAccount, + RepositoryFactory, + SignedTransaction, + Transaction, + TransactionService, + UInt64, +} from 'symbol-sdk'; +import { Addresses, ConfigPreset, KeyName, Logger, NodeAccount, NodePreset } from '../'; +import { AccountResolver } from './AccountResolver'; + +export interface TransactionFactoryParams { + presetData: ConfigPreset; + nodePreset: NodePreset; + nodeAccount: NodeAccount; + mainAccountInfo: AccountInfo; + mainAccount: PublicAccount; + deadline: Deadline; + maxFee: UInt64; + latestFinalizedBlockEpoch: number; +} + +export interface TransactionFactory { + createTransactions(params: TransactionFactoryParams): Promise; +} + +export class AnnounceService { + constructor(private readonly logger: Logger, private readonly accountResolver: AccountResolver) {} + + private static onProcessListener = () => { + process.on('SIGINT', () => { + process.exit(400); + }); + }; + + public async announce( + repositoryFactory: RepositoryFactory, + providedMaxFee: number | undefined, + ready: boolean | undefined, + presetData: ConfigPreset, + addresses: Addresses, + transactionFactory: TransactionFactory, + tokenAmount = 'some', + ): Promise { + AnnounceService.onProcessListener(); + if (!presetData.nodes || !presetData.nodes?.length) { + this.logger.info(`There are no transactions to announce...`); + return; + } + const minFeeMultiplier = (await repositoryFactory.createNetworkRepository().getTransactionFees().toPromise()).minFeeMultiplier; + const latestFinalizedBlockEpoch = (await repositoryFactory.createChainRepository().getChainInfo().toPromise()).latestFinalizedBlock + .finalizationEpoch; + + const networkType = await repositoryFactory.getNetworkType().toPromise(); + const epochAdjustment = await repositoryFactory.getEpochAdjustment().toPromise(); + const currency = (await repositoryFactory.getCurrencies().toPromise()).currency; + + const deadline = Deadline.create(epochAdjustment); + + const currencyMosaicId = currency.mosaicId; + const faucetUrl = presetData.faucetUrl; + const listener = repositoryFactory.createListener(); + await listener.open(); + const transactionRepository = repositoryFactory.createTransactionRepository(); + const transactionService = new TransactionService(transactionRepository, repositoryFactory.createReceiptRepository()); + if (providedMaxFee) { + this.logger.info(`MaxFee is ${providedMaxFee / Math.pow(10, currency.divisibility)}`); + } else { + this.logger.info(`Node's minFeeMultiplier is ${minFeeMultiplier}`); + } + + const generationHash = await repositoryFactory.getGenerationHash().toPromise(); + if (generationHash?.toUpperCase() !== presetData.nemesisGenerationHashSeed?.toUpperCase()) { + throw new Error( + `You are connecting to the wrong network. Expected generation hash is ${presetData.nemesisGenerationHashSeed} but got ${generationHash}`, + ); + } + + for (const [index, nodeAccount] of (addresses.nodes || []).entries()) { + if (!nodeAccount || !nodeAccount.main) { + throw new Error('CA/Main account is required!'); + } + const nodePreset = (presetData.nodes || [])[index]; + const mainAccount = PublicAccount.createFromPublicKey(nodeAccount.main.publicKey, presetData.networkType); + const noFundsMessage = faucetUrl + ? `Does your node signing address have any network coin? Send ${tokenAmount} tokens to ${mainAccount.address.plain()} via ${faucetUrl}/?recipient=${mainAccount.address.plain()}` + : `Does your node signing address have any network coin? Send ${tokenAmount} tokens to ${mainAccount.address.plain()} .`; + const mainAccountInfo = await this.getAccountInfo(repositoryFactory, mainAccount.address); + + if (!mainAccountInfo) { + this.logger.error(`Node signing account ${mainAccount.address.plain()} is not valid.`); + this.logger.error(noFundsMessage); + continue; + } + if (this.isAccountEmpty(mainAccountInfo, currencyMosaicId)) { + this.logger.error( + `Node signing account ${mainAccount.address.plain()} does not have enough currency. Mosaic id: ${currencyMosaicId}. \n\n${noFundsMessage}`, + ); + continue; + } + const defaultMaxFee = UInt64.fromUint(providedMaxFee || 0); + const multisigAccountInfo = await this.getMultisigAccount(repositoryFactory, mainAccount.address); + const params: TransactionFactoryParams = { + presetData, + nodePreset, + nodeAccount, + mainAccountInfo, + latestFinalizedBlockEpoch, + mainAccount, + deadline, + maxFee: defaultMaxFee, + }; + const transactions = await transactionFactory.createTransactions(params); + if (!transactions.length) { + this.logger.info(`There are not transactions to announce for node ${nodeAccount.name}`); + continue; + } + + const getTransactionDescription = (transaction: Transaction, signedTransaction: SignedTransaction): string => { + return `${transaction.constructor.name} - Hash: ${signedTransaction.hash} - MaxFee ${ + transaction.maxFee.compact() / Math.pow(10, currency.divisibility) + }`; + }; + + const shouldAnnounce = async (transaction: Transaction, signedTransaction: SignedTransaction): Promise => { + const response = + ready || + (await this.accountResolver.shouldAnnounce( + transaction, + signedTransaction, + getTransactionDescription(transaction, signedTransaction), + )); + if (!response) { + this.logger.info(`Ignoring transaction for node ${nodeAccount.name}`); + } + return response; + }; + + const resolveMainAccount = async (): Promise => { + const presetMainPrivateKey = (presetData.nodes || [])[index]?.mainPrivateKey; + if (presetMainPrivateKey) { + const account = Account.createFromPrivateKey(presetMainPrivateKey, networkType); + if (account.address.equals(mainAccount.address)) { + return account; + } + } + + return await this.accountResolver.resolveAccount( + networkType, + nodeAccount.main, + KeyName.Main, + nodeAccount.name, + 'signing a transaction', + 'Should not generate!', + ); + }; + + if (multisigAccountInfo) { + this.logger.info( + `The node's main account is a multig account with Address: ${ + multisigAccountInfo.minApproval + } min approval. Cosigners are: ${multisigAccountInfo.cosignatoryAddresses + .map((a) => a.plain()) + .join( + ', ', + )}. The tool will ask for the cosigners provide keys in order to announce the transactions. These private keys are not stored anywhere!`, + ); + const cosigners = await this.accountResolver.resolveCosigners( + networkType, + multisigAccountInfo.cosignatoryAddresses, + multisigAccountInfo.minApproval, + ); + if (!cosigners.length) { + this.logger.info('No cosigner has been provided, ignoring!'); + continue; + } + const bestCosigner = await this.getBestCosigner(repositoryFactory, cosigners, currencyMosaicId); + if (!bestCosigner) { + this.logger.info(`There is no cosigner with enough tokens to announce!`); + continue; + } + this.logger.info(`Cosigner ${bestCosigner.address.plain()} is initializing the transactions.`); + if (cosigners.length >= multisigAccountInfo.minApproval) { + let aggregateTransaction = AggregateTransaction.createComplete( + deadline, + transactions.map((t) => t.toAggregate(mainAccount)), + networkType, + [], + defaultMaxFee, + ); + if (!providedMaxFee) { + aggregateTransaction = aggregateTransaction.setMaxFeeForAggregate(minFeeMultiplier, cosigners.length - 1); + } + const signedAggregateTransaction = bestCosigner.signTransactionWithCosignatories( + aggregateTransaction, + cosigners.filter((a) => a !== bestCosigner), + generationHash, + ); + if (!(await shouldAnnounce(aggregateTransaction, signedAggregateTransaction))) { + continue; + } + try { + this.logger.info(`Announcing ${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)}`); + await transactionService.announce(signedAggregateTransaction, listener).toPromise(); + this.logger.info( + `${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)} has been confirmed`, + ); + } catch (e) { + const message = + `Aggregate Complete Transaction ${signedAggregateTransaction.type} ${ + signedAggregateTransaction.hash + } - signer ${signedAggregateTransaction.getSignerAddress().plain()} failed!! ` + e.message; + this.logger.error(message); + } + } else { + let aggregateTransaction = AggregateTransaction.createBonded( + deadline, + transactions.map((t) => t.toAggregate(mainAccount)), + networkType, + [], + defaultMaxFee, + ); + if (!providedMaxFee) { + aggregateTransaction = aggregateTransaction.setMaxFeeForAggregate(minFeeMultiplier, cosigners.length - 1); + } + const signedAggregateTransaction = bestCosigner.signTransactionWithCosignatories( + aggregateTransaction, + cosigners.filter((a) => a !== bestCosigner), + generationHash, + ); + let lockFundsTransaction: Transaction = LockFundsTransaction.create( + deadline, + currency.createRelative(10), + UInt64.fromUint(1000), + signedAggregateTransaction, + networkType, + defaultMaxFee, + ); + if (!providedMaxFee) { + lockFundsTransaction = lockFundsTransaction.setMaxFee(minFeeMultiplier); + } + const signedLockFundsTransaction = bestCosigner.sign(lockFundsTransaction, generationHash); + if (!(await shouldAnnounce(lockFundsTransaction, signedLockFundsTransaction))) { + continue; + } + if (!(await shouldAnnounce(aggregateTransaction, signedAggregateTransaction))) { + continue; + } + + try { + this.logger.info(`Announcing ${getTransactionDescription(lockFundsTransaction, signedLockFundsTransaction)}`); + await transactionService.announce(signedLockFundsTransaction, listener).toPromise(); + this.logger.info( + `${getTransactionDescription(lockFundsTransaction, signedLockFundsTransaction)} has been confirmed`, + ); + + this.logger.info( + `Announcing Bonded ${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)}`, + ); + await transactionService.announceAggregateBonded(signedAggregateTransaction, listener).toPromise(); + this.logger.info( + `${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)} has been announced`, + ); + + this.logger.info('Aggregate Bonded Transaction has been confirmed! Your cosigners would need to cosign!'); + } catch (e) { + const message = + `Aggregate Bonded Transaction ${signedAggregateTransaction.type} ${ + signedAggregateTransaction.hash + } - signer ${signedAggregateTransaction.getSignerAddress().plain()} failed!! ` + e.message; + this.logger.error(message); + } + } + } else { + const signerAccount = await resolveMainAccount(); + if (transactions.length == 1) { + let transaction = transactions[0]; + if (!providedMaxFee) { + transaction = transaction.setMaxFee(minFeeMultiplier); + } + const signedTransaction = signerAccount.sign(transactions[0], generationHash); + if (!(await shouldAnnounce(transaction, signedTransaction))) { + continue; + } + try { + this.logger.info(`Announcing ${getTransactionDescription(transaction, signedTransaction)}`); + await transactionService.announce(signedTransaction, listener).toPromise(); + this.logger.info(`${getTransactionDescription(transaction, signedTransaction)} has been confirmed`); + } catch (e) { + const message = + `Simple Transaction ${signedTransaction.type} ${signedTransaction.hash} - signer ${signedTransaction + .getSignerAddress() + .plain()} failed!! ` + e.message; + this.logger.error(message); + } + } else { + let aggregateTransaction = AggregateTransaction.createComplete( + deadline, + transactions.map((t) => t.toAggregate(mainAccount)), + networkType, + [], + defaultMaxFee, + ); + if (!providedMaxFee) { + aggregateTransaction = aggregateTransaction.setMaxFeeForAggregate(minFeeMultiplier, 0); + } + const signedAggregateTransaction = signerAccount.sign(aggregateTransaction, generationHash); + if (!(await shouldAnnounce(aggregateTransaction, signedAggregateTransaction))) { + continue; + } + try { + this.logger.info(`Announcing ${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)}`); + await transactionService.announce(signedAggregateTransaction, listener).toPromise(); + this.logger.info( + `${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)} has been confirmed`, + ); + } catch (e) { + const message = + `Aggregate Complete Transaction ${signedAggregateTransaction.type} ${ + signedAggregateTransaction.hash + } - signer ${signedAggregateTransaction.getSignerAddress().plain()} failed!! ` + e.message; + this.logger.error(message); + } + } + } + } + + listener.close(); + } + + private async getAccountInfo(repositoryFactory: RepositoryFactory, mainAccountAddress: Address): Promise { + try { + return await repositoryFactory.createAccountRepository().getAccountInfo(mainAccountAddress).toPromise(); + } catch (e) { + return undefined; + } + } + + private async getMultisigAccount( + repositoryFactory: RepositoryFactory, + mainAccountAddress: Address, + ): Promise { + try { + const info = await repositoryFactory.createMultisigRepository().getMultisigAccountInfo(mainAccountAddress).toPromise(); + return info.isMultisig() ? info : undefined; + } catch (e) { + return undefined; + } + } + + private async getBestCosigner( + repositoryFactory: RepositoryFactory, + cosigners: Account[], + currencyMosaicId: MosaicId | undefined, + ): Promise { + const accountRepository = repositoryFactory.createAccountRepository(); + for (const cosigner of cosigners) { + try { + const accountInfo = await accountRepository.getAccountInfo(cosigner.address).toPromise(); + if (!this.isAccountEmpty(accountInfo, currencyMosaicId)) { + return cosigner; + } + } catch (e) {} + } + return undefined; + } + + private isAccountEmpty(mainAccountInfo: AccountInfo, currencyMosaicId: MosaicId | undefined): boolean { + if (!currencyMosaicId) { + throw new Error('Mosaic Id must not be null!'); + } + const mosaic = mainAccountInfo.mosaics.find((m) => m.id.equals(currencyMosaicId)); + return !mosaic || mosaic.amount.compare(UInt64.fromUint(0)) < 1; + } +} diff --git a/packages/bootstrap-core/src/service/BootstrapService.ts b/packages/bootstrap-core/src/service/BootstrapService.ts new file mode 100644 index 000000000..4b212e96d --- /dev/null +++ b/packages/bootstrap-core/src/service/BootstrapService.ts @@ -0,0 +1,162 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Logger } from '../logger'; +import { Addresses, ConfigPreset, DockerCompose } from '../model'; +import { ComposeParams, ComposeService } from './ComposeService'; +import { ConfigParams, ConfigResult, ConfigService } from './ConfigService'; +import { ReportParams, ReportService } from './ReportService'; +import { RunParams, RunService } from './RunService'; + +export type StartParams = ConfigParams & ComposeParams & RunParams; + +/** + * Main entry point for API integration. + */ +export class BootstrapService { + public constructor(private readonly logger: Logger) {} + + /** + * It generates the configuration and nemesis for the provided preset + * + * @param config the params of the config command. + */ + public async config(config: ConfigParams): Promise { + return new ConfigService(this.logger, config).run(); + } + + /** + * It resolves the preset used for preventive configuration. + * + * @param config the params of the config command. + */ + public resolveConfigPreset(config: ConfigParams = ConfigService.defaultParams): ConfigPreset { + return new ConfigService(this.logger, config).resolveConfigPreset(false); + } + + /** + * It generates the docker-compose.yaml file from the previously generated configuration. + * + * The config method/command needs to be called before this method + * + * @param config the params of the compose command. + * @param passedPresetData the created preset if you know it, otherwise will load the latest one resolved from the target folder. + * @param passedAddresses the created addresses if you know if, otherwise will load the latest one resolved form the target folder. + */ + public compose(config: ComposeParams, passedPresetData?: ConfigPreset, passedAddresses?: Addresses): Promise { + return new ComposeService(this.logger, config).run(passedPresetData, passedAddresses); + } + + // /** + // * It calls a running server announcing all the node transactions like VRF and Voting. + // * + // * This command is useful to link the nodes keys to an existing running network like testnet. + // * + // * @param config the params passed + // * @param passedPresetData the created preset if you know it, otherwise will load the latest one resolved from the target folder. + // * @param passedAddresses the created addresses if you know it, otherwise will load the latest one resolved from the target folder. + // */ + // + // public async link( + // config: LinkParams = LinkService.defaultParams, + // passedPresetData?: ConfigPreset | undefined, + // passedAddresses?: Addresses | undefined, + // ): Promise { + // await new LinkService(config).run(passedPresetData, passedAddresses); + // } + + // /** + // * It calls a running service announcing the registration of the nodes to the supernode rewards program. + // * + // * @param config the params passed + // * @param passedPresetData the created preset if you know it, otherwise will load the latest one resolved from the target folder. + // * @param passedAddresses the created addresses if you know it, otherwise will load the latest one resolved from the target folder. + // */ + // public async enrollRewardProgram( + // config: RewardProgramParams = RewardProgramService.defaultParams, + // passedPresetData?: ConfigPreset | undefined, + // passedAddresses?: Addresses | undefined, + // ): Promise { + // await new RewardProgramService(config).enroll(passedPresetData, passedAddresses); + // } + + /** + * It generates reStructuredText (.rst) reports describing the configuration of each node. + * + * The config method/command needs to be called before this method + * + * @param config the params of the report command. + * @param passedPresetData the created preset if you know if, otherwise will load the latest one resolved from the target folder. + * @return the paths of the created reports. + */ + public async report(config: ReportParams, passedPresetData?: ConfigPreset): Promise { + return await new ReportService(this.logger, config).run(passedPresetData); + } + + /** + * It boots the network via docker using the generated docker-compose.yml file and configuration + * + * The config and compose methods/commands need to be called before this method. + * + * This is just a wrapper for docker-compose up bash call. + * + * @param config the params of the run command. + */ + public async run(config: RunParams): Promise { + await new RunService(this.logger, config).run(); + } + + /** + * It resets the data keeping generated configuration, block 1, certificates and keys. + * + * @param config the params of the clean command. + */ + public async resetData(config: { target: string }): Promise { + await new RunService(this.logger, config).resetData(); + } + + /** + * It checks if the health of the running services is ok. + * + * @param config the params of the clean command. + */ + public async healthCheck(config: { target: string }): Promise { + await new RunService(this.logger, config).healthCheck(); + } + + /** + * This method aggregates config, compose and run all in one. + * + * @param config the aggregated params in order to run all the sub commands. + */ + public async start(config: StartParams): Promise { + const configResult = await this.config(config); + await this.compose(config, configResult.presetData); + await this.run(config); + return configResult; + } + + /** + * It stops the docker-compose network if running. + * + * This is just a wrapper for docker-compose down bash call. + * + * @param config the params necessary to detect and stop the network. + */ + public async stop(config: RunParams): Promise { + await new RunService(this.logger, config).stop(); + } +} diff --git a/src/service/BootstrapUtils.ts b/packages/bootstrap-core/src/service/BootstrapUtils.ts similarity index 81% rename from src/service/BootstrapUtils.ts rename to packages/bootstrap-core/src/service/BootstrapUtils.ts index bfe98bcd6..a3ba05432 100644 --- a/src/service/BootstrapUtils.ts +++ b/packages/bootstrap-core/src/service/BootstrapUtils.ts @@ -14,8 +14,7 @@ * limitations under the License. */ -import { spawn } from 'child_process'; -import { textSync } from 'figlet'; +import { exec, spawn } from 'child_process'; import { createWriteStream, existsSync, @@ -30,23 +29,19 @@ import { } from 'fs'; import * as Handlebars from 'handlebars'; import { get } from 'https'; +import * as yaml from 'js-yaml'; import * as _ from 'lodash'; import { totalmem } from 'os'; import { basename, dirname, join, resolve } from 'path'; import { Convert, DtoMapping, NetworkType } from 'symbol-sdk'; import * as util from 'util'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; +import { Logger } from '../logger'; import { CryptoUtils } from './CryptoUtils'; // eslint-disable-next-line @typescript-eslint/no-var-requires const version = require('../../package.json').version; // eslint-disable-next-line @typescript-eslint/no-var-requires -const yaml = require('js-yaml'); -// eslint-disable-next-line @typescript-eslint/no-var-requires -const exec = util.promisify(require('child_process').exec); -const logger: Logger = LoggerFactory.getLogger(LogType.System); +const promisifyExec = util.promisify(exec); export type Password = string | false | undefined; @@ -71,6 +66,7 @@ export class BootstrapUtils { public static readonly targetWalletsFolder = 'wallets'; public static readonly targetDatabasesFolder = 'databases'; public static readonly targetNemesisFolder = 'nemesis'; + public static readonly defaultWorkingDir = '.'; public static readonly CURRENT_USER = 'current'; private static readonly pulledImages: string[] = []; @@ -107,6 +103,7 @@ export class BootstrapUtils { } public static async download( + logger: Logger, url: string, dest: string, ): Promise<{ @@ -160,7 +157,7 @@ export class BootstrapUtils { }); }); - file.on('error', (err) => { + file.on('error', (err: any) => { file.close(); if (err.code === 'EEXIST') { reject(new Error('File already exists')); @@ -187,14 +184,14 @@ export class BootstrapUtils { process.stdout.write(message); } - public static deleteFolder(folder: string, excludeFiles: string[] = []): void { + public static deleteFolder(logger: Logger, folder: string, excludeFiles: string[] = []): void { if (existsSync(folder)) { logger.info(`Deleting folder ${folder}`); } - return BootstrapUtils.deleteFolderRecursive(folder, excludeFiles); + return BootstrapUtils.deleteFolderRecursive(logger, folder, excludeFiles); } - private static deleteFolderRecursive(folder: string, excludeFiles: string[] = []): void { + private static deleteFolderRecursive(logger: Logger, folder: string, excludeFiles: string[] = []): void { if (existsSync(folder)) { readdirSync(folder).forEach((file: string) => { const currentPath = join(folder, file); @@ -205,6 +202,7 @@ export class BootstrapUtils { if (lstatSync(currentPath).isDirectory()) { // recurse this.deleteFolderRecursive( + logger, currentPath, excludeFiles.map((file) => join(currentPath, file)), ); @@ -223,10 +221,6 @@ export class BootstrapUtils { } } - public static showBanner(): void { - console.log(textSync('symbol-bootstrap', { horizontalLayout: 'fitted' })); - } - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types public static validateIsDefined(value: any, message: string): void { if (value === undefined || value === null) { @@ -240,14 +234,14 @@ export class BootstrapUtils { } } - public static async pullImage(image: string): Promise { + public static async pullImage(logger: Logger, image: string): Promise { this.validateIsDefined(image, 'Image must be provided'); if (BootstrapUtils.pulledImages.indexOf(image) > -1) { return; } try { logger.info(`Pulling image ${image}`); - const stdout = await this.spawn('docker', ['pull', image], true, `${image} `); + const stdout = await this.spawn('docker', ['pull', image], logger, true, `${image} `); const outputLines = stdout.toString().split('\n'); logger.info(`Image pulled: ${outputLines[outputLines.length - 2]}`); BootstrapUtils.pulledImages.push(image); @@ -264,21 +258,24 @@ export class BootstrapUtils { return rootFolder; } - public static async runImageUsingExec({ - catapultAppFolder, - image, - userId, - workdir, - cmds, - binds, - }: { - catapultAppFolder?: string; - image: string; - userId?: string; - workdir?: string; - cmds: string[]; - binds: string[]; - }): Promise<{ stdout: string; stderr: string }> { + public static async runImageUsingExec( + logger: Logger, + { + catapultAppFolder, + image, + userId, + workdir, + cmds, + binds, + }: { + catapultAppFolder?: string; + image: string; + userId?: string; + workdir?: string; + cmds: string[]; + binds: string[]; + }, + ): Promise<{ stdout: string; stderr: string }> { const volumes = binds.map((b) => `-v ${b}`).join(' '); const userParam = userId ? `-u ${userId}` : ''; const workdirParam = workdir ? `--workdir=${workdir}` : ''; @@ -287,7 +284,7 @@ export class BootstrapUtils { .map((a) => `"${a}"`) .join(' ')}`; logger.info(BootstrapUtils.secureString(`Running image using Exec: ${image} ${cmds.join(' ')}`)); - return await this.exec(runCommand); + return await this.exec(logger, runCommand); } public static toAns1(privateKey: string): string { @@ -302,14 +299,19 @@ export class BootstrapUtils { public static sleep(ms: number): Promise { // Create a promise that rejects in milliseconds - return new Promise((resolve) => { + return new Promise((resolve) => { setTimeout(() => { resolve(); }, ms); }); } - public static poll(promiseFunction: () => Promise, totalPollingTime: number, pollIntervalMs: number): Promise { + public static poll( + logger: Logger, + promiseFunction: () => Promise, + totalPollingTime: number, + pollIntervalMs: number, + ): Promise { const startTime = new Date().getMilliseconds(); return promiseFunction().then(async (result) => { if (result) { @@ -323,7 +325,7 @@ export class BootstrapUtils { if (newPollingTime) { logger.info(`Retrying in ${pollIntervalMs / 1000} seconds. Polling will stop in ${newPollingTime / 1000} seconds`); await BootstrapUtils.sleep(pollIntervalMs); - return this.poll(promiseFunction, newPollingTime, pollIntervalMs); + return this.poll(logger, promiseFunction, newPollingTime, pollIntervalMs); } else { return false; } @@ -379,6 +381,30 @@ export class BootstrapUtils { ); } + public static async copyDir(copyFrom: string, copyTo: string, excludeFiles: string[] = [], includeFiles: string[] = []): Promise { + await BootstrapUtils.mkdir(copyTo); + const files = await fsPromises.readdir(copyFrom); + await Promise.all( + files.map(async (file: string) => { + const fromPath = join(copyFrom, file); + const toPath = join(copyTo, file); + // Stat the file to see if we have a file or dir + const stat = await fsPromises.stat(fromPath); + if (stat.isFile()) { + const fileName = basename(toPath); + const notBlacklisted = excludeFiles.indexOf(fileName) === -1; + const inWhitelistIfAny = includeFiles.length === 0 || includeFiles.indexOf(fileName) > -1; + if (notBlacklisted && inWhitelistIfAny) { + await fsPromises.copyFile(fromPath, toPath); + } + } else if (stat.isDirectory()) { + await BootstrapUtils.mkdir(toPath); + await this.copyDir(fromPath, toPath, excludeFiles, includeFiles); + } + }), + ); + } + public static async chmodRecursive(path: string, mode: string | number): Promise { // Loop through all the files in the config folder const stat = await fsPromises.stat(path); @@ -396,8 +422,17 @@ export class BootstrapUtils { // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types public static runTemplate(template: string, templateContext: any): string { - const compiledTemplate = Handlebars.compile(template); - return compiledTemplate(templateContext); + try { + const compiledTemplate = Handlebars.compile(template); + return compiledTemplate(templateContext); + } catch (e) { + const securedTemplate = BootstrapUtils.secureString(template); + const securedContext = BootstrapUtils.secureString(BootstrapUtils.toYaml(templateContext)); + const securedMessage = BootstrapUtils.secureString(e.message || 'Unknown'); + + const message = `Unknown error rendering template. Error: ${securedMessage}\nTemplate:\n${securedTemplate}.`; + throw new Error(`${message}\nContext: \n${securedContext}`); + } } public static async mkdir(path: string): Promise { @@ -411,8 +446,7 @@ export class BootstrapUtils { } } - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - public static async writeYaml(path: string, object: any, password: string | undefined): Promise { + public static async writeYaml(path: string, object: unknown, password: Password): Promise { const yamlString = this.toYaml(password ? CryptoUtils.encrypt(object, BootstrapUtils.validatePassword(password)) : object); await BootstrapUtils.writeTextFile(path, yamlString); } @@ -470,34 +504,38 @@ export class BootstrapUtils { await fsPromises.writeFile(path, text, 'utf8'); } + public static isValidPrivateKey(input: string): boolean | string { + return Convert.isHexString(input, 64) ? true : 'Invalid private key. It must have 64 hex characters.'; + } + public static async readTextFile(path: string): Promise { return await fsPromises.readFile(path, 'utf8'); } private static dockerUserId: string; - public static async resolveDockerUserFromParam(paramUser: string | undefined): Promise { + public static async resolveDockerUserFromParam(logger: Logger, paramUser: string | undefined): Promise { if (!paramUser || paramUser.trim() === '') { return undefined; } if (paramUser === BootstrapUtils.CURRENT_USER) { - return BootstrapUtils.getDockerUserGroup(); + return BootstrapUtils.getDockerUserGroup(logger); } return paramUser; } - public static async createImageUsingExec(targetFolder: string, dockerFile: string, tag: string): Promise { + public static async createImageUsingExec(logger: Logger, targetFolder: string, dockerFile: string, tag: string): Promise { const runCommand = `docker build -f ${dockerFile} ${targetFolder} -t ${tag}`; logger.info(`Creating image image '${tag}' from ${dockerFile}`); - return (await this.exec(runCommand)).stdout; + return (await this.exec(logger, runCommand)).stdout; } - public static async exec(runCommand: string): Promise<{ stdout: string; stderr: string }> { + public static async exec(logger: Logger, runCommand: string): Promise<{ stdout: string; stderr: string }> { logger.debug(`Exec command: ${runCommand}`); - const { stdout, stderr } = await exec(runCommand); + const { stdout, stderr } = await promisifyExec(runCommand); return { stdout, stderr }; } - public static async spawn(command: string, args: string[], useLogger: boolean, logPrefix = ''): Promise { + public static async spawn(command: string, args: string[], logger: Logger, useLogger: boolean, logPrefix = ''): Promise { const cmd = spawn(command, args); return new Promise((resolve, reject) => { logger.info(`Spawn command: ${command} ${args.join(' ')}`); @@ -512,13 +550,15 @@ export class BootstrapUtils { } }; - cmd.stdout.on('data', (data) => { - log(`${data}`.trim(), false); - }); + if (cmd.stdout) + cmd.stdout.on('data', (data) => { + log(`${data}`.trim(), false); + }); - cmd.stderr.on('data', (data) => { - log(`${data}`.trim(), true); - }); + if (cmd.stderr) + cmd.stderr.on('data', (data) => { + log(`${data}`.trim(), true); + }); cmd.on('error', (error) => { log(`${error.message}`.trim(), true); @@ -548,7 +588,7 @@ export class BootstrapUtils { }); } - public static async getDockerUserGroup(): Promise { + public static async getDockerUserGroup(logger: Logger): Promise { const isWin = this.isWindows(); if (isWin) { return ''; @@ -580,15 +620,6 @@ export class BootstrapUtils { return process.platform === 'win32'; } - public static validateFolder(workingDirFullPath: string): void { - if (!existsSync(workingDirFullPath)) { - throw new Error(`${workingDirFullPath} folder does not exist`); - } - if (!lstatSync(workingDirFullPath).isDirectory()) { - throw new Error(`${workingDirFullPath} is not a folder!`); - } - } - public static getTargetFolder(target: string, absolute: boolean, ...paths: string[]): string { if (absolute) { return join(process.cwd(), target, ...paths); @@ -612,6 +643,9 @@ export class BootstrapUtils { public static getTargetDatabasesFolder(target: string, absolute: boolean, ...paths: string[]): string { return this.getTargetFolder(target, absolute, this.targetDatabasesFolder, ...paths); } + public static zeroPad(num: number, places: number): string { + return String(num).padStart(places, '0'); + } //HANDLEBARS READY FUNCTIONS: private static initialize = (() => { @@ -659,10 +693,16 @@ export class BootstrapUtils { } public static toHex(renderedText: string): string { + if (!renderedText) { + return ''; + } const numberAsString = BootstrapUtils.toSimpleHex(renderedText); return '0x' + (numberAsString.match(/\w{1,4}(?=(\w{4})*$)/g) || [numberAsString]).join("'"); } public static toSimpleHex(renderedText: string): string { + if (!renderedText) { + return ''; + } return renderedText.toString().split("'").join('').replace(/^(0x)/, ''); } @@ -673,7 +713,11 @@ export class BootstrapUtils { public static formatJson(string: string): string { // Validates and format the json string. - return JSON.stringify(JSON.parse(string), null, 2); + try { + return JSON.stringify(JSON.parse(string), null, 2); + } catch (e) { + throw new Error(`${e.message}:JSON\n ${string}`); + } } public static splitCsv(object: string): string[] { @@ -685,7 +729,12 @@ export class BootstrapUtils { } // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - public static migrate(entityName: string, versioned: T, migrations: Migration[] = []): T { + public static migrate( + logger: Logger, + entityName: string, + versioned: T, + migrations: Migration[] = [], + ): T { if (!versioned) { return versioned; } @@ -752,6 +801,10 @@ export class BootstrapUtils { writeFileSync(file, Convert.hexToUint8(BootstrapUtils.toAns1(privateKey))); } + public static isYmlFile(string: string): boolean { + return string.toLowerCase().endsWith('.yml') || string.toLowerCase().endsWith('.yaml'); + } + public static validatePassword(password: string): string { const passwordMinSize = 4; if (password.length < passwordMinSize) { @@ -759,4 +812,25 @@ export class BootstrapUtils { } return password; } + + public static validateFolder(workingDirFullPath: string): void { + if (!existsSync(workingDirFullPath)) { + throw new Error(`${workingDirFullPath} folder does not exist`); + } + if (!lstatSync(workingDirFullPath).isDirectory()) { + throw new Error(`${workingDirFullPath} is not a folder!`); + } + } + + public static async validateSeedFolder(nemesisSeedFolder: string, message: string): Promise { + BootstrapUtils.validateFolder(nemesisSeedFolder); + const seedData = join(nemesisSeedFolder, '00000', '00001.dat'); + if (!existsSync(seedData)) { + throw new KnownError(`File ${seedData} doesn't exist! ${message}`); + } + const seedIndex = join(nemesisSeedFolder, 'index.dat'); + if (!existsSync(seedIndex)) { + throw new KnownError(`File ${seedIndex} doesn't exist! ${message}`); + } + } } diff --git a/src/service/CertificateService.ts b/packages/bootstrap-core/src/service/CertificateService.ts similarity index 82% rename from src/service/CertificateService.ts rename to packages/bootstrap-core/src/service/CertificateService.ts index 5fa987aab..471ef0bf1 100644 --- a/src/service/CertificateService.ts +++ b/packages/bootstrap-core/src/service/CertificateService.ts @@ -17,17 +17,14 @@ import { existsSync } from 'fs'; import { join, resolve } from 'path'; import { Convert, Crypto, NetworkType } from 'symbol-sdk'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; +import { Logger } from '../logger'; import { CertificatePair } from '../model'; -import { BootstrapUtils } from './BootstrapUtils'; -import { CommandUtils } from './CommandUtils'; -import { KeyName } from './ConfigService'; +import { AccountResolver, BootstrapUtils, KeyName } from './'; export interface CertificateParams { readonly target: string; readonly user: string; + readonly accountResolver: AccountResolver; } export interface CertificateMetadata { @@ -36,8 +33,6 @@ export interface CertificateMetadata { readonly version: number; } -const logger: Logger = LoggerFactory.getLogger(LogType.System); - export interface NodeCertificates { main: CertificatePair; transport: CertificatePair; @@ -46,7 +41,7 @@ export interface NodeCertificates { export class CertificateService { private static readonly METADATA_VERSION = 1; - constructor(private readonly root: string, protected readonly params: CertificateParams) {} + constructor(private readonly logger: Logger, protected readonly params: CertificateParams) {} public static getCertificates(stdout: string): CertificatePair[] { const locations = (string: string, substring: string): number[] => { @@ -89,38 +84,40 @@ export class CertificateService { customCertFolder?: string, randomSerial?: string, ): Promise { - const copyFrom = `${this.root}/config/cert`; + const copyFrom = join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'config', 'cert'); const certFolder = customCertFolder || BootstrapUtils.getTargetNodesFolder(this.params.target, false, name, 'cert'); const metadataFile = join(certFolder, 'metadata.yml'); if (!(await this.shouldGenerateCertificate(metadataFile, providedCertificates))) { - logger.info(`Certificates for node ${name} have been previously generated. Reusing...`); + this.logger.info(`Certificates for node ${name} have been previously generated. Reusing...`); return; } - await BootstrapUtils.deleteFolder(certFolder); + await BootstrapUtils.deleteFolder(this.logger, certFolder); await BootstrapUtils.mkdir(certFolder); const newCertsFolder = join(certFolder, 'new_certs'); await BootstrapUtils.mkdir(newCertsFolder); const generatedContext = { name }; await BootstrapUtils.generateConfiguration(generatedContext, copyFrom, certFolder, []); - const mainAccountPrivateKey = await CommandUtils.resolvePrivateKey( + const mainAccount = await this.params.accountResolver.resolveAccount( networkType, providedCertificates.main, KeyName.Main, name, 'generating the server CA certificates', + 'Should not generate!', ); - const transportPrivateKey = await CommandUtils.resolvePrivateKey( + const transportAccount = await this.params.accountResolver.resolveAccount( networkType, providedCertificates.transport, KeyName.Transport, name, 'generating the server Node certificates', + 'Should not generate!', ); - BootstrapUtils.createDerFile(mainAccountPrivateKey, join(certFolder, 'ca.der')); - BootstrapUtils.createDerFile(transportPrivateKey, join(certFolder, 'node.der')); + BootstrapUtils.createDerFile(mainAccount.privateKey, join(certFolder, 'ca.der')); + BootstrapUtils.createDerFile(transportAccount.privateKey, join(certFolder, 'node.der')); await BootstrapUtils.writeTextFile( join(certFolder, 'serial.dat'), (randomSerial?.trim() || Convert.uint8ToHex(Crypto.randomBytes(19))).toLowerCase() + '\n', @@ -131,8 +128,8 @@ export class CertificateService { await BootstrapUtils.writeTextFile(join(certFolder, 'createNodeCertificates.sh'), command); const cmd = ['bash', 'createNodeCertificates.sh']; const binds = [`${resolve(certFolder)}:/data:rw`]; - const userId = await BootstrapUtils.resolveDockerUserFromParam(this.params.user); - const { stdout, stderr } = await BootstrapUtils.runImageUsingExec({ + const userId = await BootstrapUtils.resolveDockerUserFromParam(this.logger, this.params.user); + const { stdout, stderr } = await BootstrapUtils.runImageUsingExec(this.logger, { image: symbolServerImage, userId: userId, workdir: '/data', @@ -140,8 +137,8 @@ export class CertificateService { binds: binds, }); if (stdout.indexOf('Certificate Created') < 0) { - logger.info(BootstrapUtils.secureString(stdout)); - logger.error(BootstrapUtils.secureString(stderr)); + this.logger.info(BootstrapUtils.secureString(stdout)); + this.logger.error(BootstrapUtils.secureString(stderr)); throw new Error('Certificate creation failed. Check the logs!'); } @@ -149,13 +146,13 @@ export class CertificateService { if (certificates.length != 2) { throw new Error('Certificate creation failed. 2 certificates should have been created but got: ' + certificates.length); } - logger.info(`Certificate for node ${name} created`); + this.logger.info(`Certificate for node ${name} created`); const caCertificate = certificates[0]; const nodeCertificate = certificates[1]; - BootstrapUtils.validateIsTrue(caCertificate.privateKey === mainAccountPrivateKey, 'Invalid ca private key'); + BootstrapUtils.validateIsTrue(caCertificate.privateKey === mainAccount.privateKey, 'Invalid ca private key'); BootstrapUtils.validateIsTrue(caCertificate.publicKey === providedCertificates.main.publicKey, 'Invalid ca public key'); - BootstrapUtils.validateIsTrue(nodeCertificate.privateKey === transportPrivateKey, 'Invalid Node private key'); + BootstrapUtils.validateIsTrue(nodeCertificate.privateKey === transportAccount.privateKey, 'Invalid Node private key'); BootstrapUtils.validateIsTrue(nodeCertificate.publicKey === providedCertificates.transport.publicKey, 'Invalid Node public key'); const metadata: CertificateMetadata = { @@ -171,14 +168,14 @@ export class CertificateService { return true; } try { - const metadata = BootstrapUtils.loadYaml(metadataFile, false) as CertificateMetadata; + const metadata = (await BootstrapUtils.loadYaml(metadataFile, false)) as CertificateMetadata; return ( metadata.mainPublicKey !== providedCertificates.main.publicKey || metadata.transportPublicKey !== providedCertificates.transport.publicKey || metadata.version !== CertificateService.METADATA_VERSION ); } catch (e) { - logger.warn(`Cannot load node certificate metadata from file ${metadataFile}. Error: ${e.message}`, e); + this.logger.warn(`Cannot load node certificate metadata from file ${metadataFile}. Error: ${e.message}`, e); return true; } } @@ -221,6 +218,9 @@ rm createNodeCertificates.sh rm ca.key.pem rm ca.der rm node.der +rm index.txt* +rm serial.dat* +rm -rf new_certs echo "Certificate Created" `; diff --git a/src/service/ComposeService.ts b/packages/bootstrap-core/src/service/ComposeService.ts similarity index 81% rename from src/service/ComposeService.ts rename to packages/bootstrap-core/src/service/ComposeService.ts index 70b73e400..ec5e69cbf 100644 --- a/src/service/ComposeService.ts +++ b/packages/bootstrap-core/src/service/ComposeService.ts @@ -17,16 +17,12 @@ import { existsSync } from 'fs'; import * as _ from 'lodash'; import { join } from 'path'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { Addresses, ConfigPreset, DockerCompose, DockerComposeService, DockerServicePreset } from '../model'; -import { BootstrapUtils } from './BootstrapUtils'; +import { Logger } from '../logger'; +import { Addresses, ConfigPreset, DockerCompose, DockerComposeService, DockerServicePreset, FaucetPreset } from '../model'; +import { BootstrapUtils, Password } from './BootstrapUtils'; import { ConfigLoader } from './ConfigLoader'; // eslint-disable-next-line @typescript-eslint/no-var-requires -export type ComposeParams = { target: string; user?: string; upgrade?: boolean; password?: string }; - -const logger: Logger = LoggerFactory.getLogger(LogType.System); +export type ComposeParams = { target: string; user?: string; upgrade?: boolean; password?: Password }; const targetNodesFolder = BootstrapUtils.targetNodesFolder; const targetDatabasesFolder = BootstrapUtils.targetDatabasesFolder; @@ -54,8 +50,8 @@ export class ComposeService { private readonly configLoader: ConfigLoader; - constructor(private readonly root: string, protected readonly params: ComposeParams) { - this.configLoader = new ConfigLoader(); + constructor(private readonly logger: Logger, protected readonly params: ComposeParams) { + this.configLoader = new ConfigLoader(logger); } public resolveDebugOptions(dockerComposeDebugMode: boolean, dockerComposeServiceDebugMode: boolean | undefined): any { @@ -75,26 +71,26 @@ export class ComposeService { const target = join(currentDir, this.params.target); const targetDocker = join(target, `docker`); if (this.params.upgrade) { - BootstrapUtils.deleteFolder(targetDocker); + BootstrapUtils.deleteFolder(this.logger, targetDocker); } const dockerFile = join(targetDocker, 'docker-compose.yml'); if (existsSync(dockerFile)) { - logger.info(dockerFile + ' already exist. Reusing. (run --upgrade to drop and upgrade)'); + this.logger.info(dockerFile + ' already exist. Reusing. (run --upgrade to drop and upgrade)'); return BootstrapUtils.loadYaml(dockerFile, false); } await BootstrapUtils.mkdir(targetDocker); - await BootstrapUtils.generateConfiguration(presetData, join(this.root, 'config', 'docker'), targetDocker); + await BootstrapUtils.generateConfiguration(presetData, join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'config', 'docker'), targetDocker); await BootstrapUtils.chmodRecursive(join(targetDocker, 'mongo'), 0o666); - const user: string | undefined = await BootstrapUtils.resolveDockerUserFromParam(this.params.user); + const user: string | undefined = await BootstrapUtils.resolveDockerUserFromParam(this.logger, this.params.user); const vol = (hostFolder: string, imageFolder: string, readOnly: boolean): string => { return `${hostFolder}:${imageFolder}:${readOnly ? 'ro' : 'rw'}`; }; - logger.info(`Creating docker-compose.yml from last used profile.`); + this.logger.info(`Creating docker-compose.yml from last used profile.`); const services: (DockerComposeService | undefined)[] = []; @@ -113,52 +109,21 @@ export class ComposeService { servicePreset: DockerServicePreset, rawService: DockerComposeService, ): Promise => { - if (false) { - // POC about creating custom aws images. - const serviceName = rawService.container_name; - const volumes = rawService.volumes || []; - const image = rawService.image; - const repository = 'nem-repository'; - const dockerfileContent = `FROM docker.io/${image}\n\n${volumes - .map((v) => { - const parts = v.split(':'); - return `ADD ${parts[0].replace('../', '').replace('./', 'docker/')} ${parts[1]}`; - }) - .join('\n')}\n`; - const dockerFile = join(target, 'Dockerfile-' + serviceName); - await BootstrapUtils.writeTextFile(dockerFile, dockerfileContent); - await Promise.all( - volumes.map(async (v) => { - const parts = v.split(':'); - await BootstrapUtils.mkdir(join(targetDocker, parts[0])); - }), - ); - const generatedImageName = repository + ':' + serviceName; - await BootstrapUtils.createImageUsingExec(target, dockerFile, generatedImageName); - - // const awsUserId = '172617417348'; - // aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 172617417348.dkr.ecr.us-east-1.amazonaws.com - // const absoluteImageUrl = `${awsUserId}.dkr.ecr.us-east-1.amazonaws.com/${generatedImageName}`; - // await BootstrapUtils.exec(`docker tag ${generatedImageName} ${absoluteImageUrl}`); - - return { ...rawService, image: generatedImageName, volumes: undefined }; - } else { - const service = { ...rawService }; - if (servicePreset.host || servicePreset.ipv4_address) { - service.networks = { default: {} }; - } - if (servicePreset.host) { - service.hostname = servicePreset.host; - service.networks!.default.aliases = [servicePreset.host]; - } - if (servicePreset.environment) { - service.environment = { ...servicePreset.environment, ...rawService.environment }; - } - if (servicePreset.ipv4_address) { - service.networks!.default.ipv4_address = servicePreset.ipv4_address; - } - return service; + const service = { ...rawService }; + if (servicePreset.host || servicePreset.ipv4_address) { + service.networks = { default: {} }; + } + if (servicePreset.host) { + service.hostname = servicePreset.host; + service.networks!.default.aliases = [servicePreset.host]; + } + if (servicePreset.environment) { + service.environment = { ...servicePreset.environment, ...rawService.environment }; } + if (servicePreset.ipv4_address) { + service.networks!.default.ipv4_address = servicePreset.ipv4_address; + } + return service; }; await Promise.all( @@ -190,6 +155,7 @@ export class ComposeService { const nodeWorkingDirectory = '/symbol-workdir'; const nodeCommandsDirectory = '/symbol-commands'; + const nemesisSeed = presetData.seedDirectory; const restart = presetData.dockerComposeServiceRestart; await Promise.all( (presetData.nodes || []) @@ -219,6 +185,7 @@ export class ComposeService { const volumes = [ vol(`../${targetNodesFolder}/${n.name}`, nodeWorkingDirectory, false), vol(`./server`, nodeCommandsDirectory, true), + vol(`../nemesis/seed`, nodeWorkingDirectory + nemesisSeed.replace('./', '/'), true), ]; const nodeService = await resolveService(n, { user: serverDebugMode === debugFlag ? undefined : user, // if debug on, run as root @@ -356,14 +323,15 @@ export class ComposeService { vol(`../${targetExplorersFolder}/${n.name}`, nodeWorkingDirectory, true), vol(`./explorer`, nodeCommandsDirectory, true), ]; + const entrypoint = `ash -c "/bin/ash ${nodeCommandsDirectory}/run.sh ${n.name}"`; services.push( await resolveService(n, { container_name: n.name, image: presetData.symbolExplorerImage, - command: `ash -c "/bin/ash ${nodeCommandsDirectory}/run.sh ${n.name}"`, + entrypoint: entrypoint, stop_signal: 'SIGINT', working_dir: nodeWorkingDirectory, - ports: resolvePorts([{ internalPort: 80, openPort: n.openPort }]), + ports: resolvePorts([{ internalPort: 4000, openPort: n.openPort }]), restart: restart, volumes: volumes, ...this.resolveDebugOptions(presetData.dockerComposeDebugMode, n.dockerComposeDebugMode), @@ -376,7 +344,9 @@ export class ComposeService { await Promise.all( (presetData.faucets || []) .filter((d) => !d.excludeDockerService) - .map(async (n) => { + .map(async (n, index) => { + const mosaicPreset = presetData.nemesis.mosaics[0]; + const fullName = `${presetData.baseNamespace}.${mosaicPreset.name}`; // const nemesisPrivateKey = addresses?.mosaics?[0]?/; services.push( await resolveService(n, { @@ -384,8 +354,8 @@ export class ComposeService { image: presetData.symbolFaucetImage, stop_signal: 'SIGINT', environment: { - FAUCET_PRIVATE_KEY: - n.environment?.FAUCET_PRIVATE_KEY || this.getMainAccountPrivateKey(passedAddresses) || '', + NATIVE_CURRENCY_NAME: n.environment?.NATIVE_CURRENCY_NAME || fullName, + FAUCET_PRIVATE_KEY: this.resolveFaucetPrivateKey(n, passedAddresses, index) || '', NATIVE_CURRENCY_ID: BootstrapUtils.toSimpleHex( n.environment?.NATIVE_CURRENCY_ID || presetData.currencyMosaicId || '', ), @@ -422,12 +392,22 @@ export class ComposeService { dockerCompose = BootstrapUtils.pruneEmpty(dockerCompose); await BootstrapUtils.writeYaml(dockerFile, dockerCompose, undefined); - logger.info(`The docker-compose.yml file created ${dockerFile}`); + this.logger.info(`The docker-compose.yml file created ${dockerFile}`); return dockerCompose; } - private getMainAccountPrivateKey(passedAddresses: Addresses | undefined) { + private resolveFaucetPrivateKey( + faucetPreset: FaucetPreset, + passedAddresses: Addresses | undefined, + faucetIndex: number, + ): string | undefined { + if (faucetPreset.environment?.FAUCET_PRIVATE_KEY) { + return faucetPreset.environment?.FAUCET_PRIVATE_KEY; + } + if (faucetPreset.privateKey) { + return faucetPreset.privateKey; + } const addresses = passedAddresses ?? this.configLoader.loadExistingAddresses(this.params.target, this.params.password); - return addresses?.mosaics?.[0]?.accounts[0].privateKey; + return addresses?.faucets?.[faucetIndex]?.account?.privateKey || addresses?.mosaics?.[0]?.accounts[0].privateKey; } } diff --git a/packages/bootstrap-core/src/service/ConfigLoader.ts b/packages/bootstrap-core/src/service/ConfigLoader.ts new file mode 100644 index 000000000..dd079ae87 --- /dev/null +++ b/packages/bootstrap-core/src/service/ConfigLoader.ts @@ -0,0 +1,777 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { existsSync } from 'fs'; +import * as _ from 'lodash'; +import { join } from 'path'; +import { Account, Address, Convert, Crypto, MosaicId, MosaicNonce, NetworkType, PublicAccount } from 'symbol-sdk'; +import { Logger } from '../logger'; +import { + Addresses, + ConfigAccount, + ConfigPreset, + CustomPreset, + MosaicAccounts, + NodeAccount, + NodePreset, + PrivateKeySecurityMode, +} from '../model'; +import { AccountResolver } from './AccountResolver'; +import { BootstrapUtils, KnownError, Migration, Password } from './BootstrapUtils'; +import { Assembly, KeyName } from './ConfigService'; +import { CryptoUtils } from './CryptoUtils'; + +export class ConfigLoader { + public static presetInfoLogged = false; + + constructor(private readonly logger: Logger) {} + + public async generateRandomConfiguration( + oldAddresses: Addresses | undefined, + oldPresetData: ConfigPreset | undefined, + presetData: ConfigPreset, + accountResolver: AccountResolver, + ): Promise { + const networkType = presetData.networkType; + + if (!networkType) { + throw new Error('Network Type could not be resolved. Have your provided the right --preset?'); + } + + const addresses: Addresses = { + version: this.getAddressesMigration(networkType).length + 1, + networkType: networkType, + nemesisGenerationHashSeed: + presetData.nemesisGenerationHashSeed || + oldAddresses?.nemesisGenerationHashSeed || + Convert.uint8ToHex(Crypto.randomBytes(32)), + sinkAddress: presetData.sinkAddress || oldAddresses?.sinkAddress, + }; + + //Sync address is generated on demand only + const getDefaultSyncAddress = (): string => { + addresses.sinkAddress = addresses.sinkAddress || Account.generateNewAccount(networkType).address.plain(); + return addresses.sinkAddress; + }; + + if (presetData.nodes) { + addresses.nodes = await this.generateNodeAccounts(accountResolver, oldAddresses, presetData, networkType); + } + if (!presetData.harvestNetworkFeeSinkAddress) { + presetData.harvestNetworkFeeSinkAddress = getDefaultSyncAddress(); + } + if (!presetData.mosaicRentalFeeSinkAddress) { + presetData.mosaicRentalFeeSinkAddress = getDefaultSyncAddress(); + } + if (!presetData.namespaceRentalFeeSinkAddress) { + presetData.namespaceRentalFeeSinkAddress = getDefaultSyncAddress(); + } + presetData.networkIdentifier = BootstrapUtils.getNetworkIdentifier(networkType); + presetData.networkName = BootstrapUtils.getNetworkName(networkType); + if (!presetData.nemesisGenerationHashSeed) { + presetData.nemesisGenerationHashSeed = addresses.nemesisGenerationHashSeed; + } + const privateKeySecurityMode = CryptoUtils.getPrivateKeySecurityMode(presetData.privateKeySecurityMode); + const shouldCreateNemesis = ConfigLoader.shouldCreateNemesis(presetData); + if (shouldCreateNemesis) { + const signerPrivateKey = + presetData.nemesis.nemesisSignerPrivateKey || + oldAddresses?.nemesisSigner?.privateKey || + Account.generateNewAccount(networkType).privateKey; + + const signerPublicKey = presetData.nemesisSignerPublicKey || oldAddresses?.nemesisSigner?.publicKey; + addresses.nemesisSigner = ConfigLoader.toConfigFromKeys(networkType, signerPublicKey, signerPrivateKey); + + if (!addresses.nemesisSigner) { + throw new Error('Nemesis Signer should be resolved!'); + } + if (!addresses.nemesisSigner.privateKey) { + throw new Error('Nemesis Signer Private Key should be resolved!'); + } + presetData.nemesisSignerPublicKey = addresses.nemesisSigner.publicKey; + presetData.nemesis.nemesisSignerPrivateKey = addresses.nemesisSigner.privateKey; + } + + const nemesisSignerAddress = Address.createFromPublicKey(presetData.nemesisSignerPublicKey, networkType); + + if (!presetData.currencyMosaicId) + presetData.currencyMosaicId = MosaicId.createFromNonce(MosaicNonce.createFromNumber(0), nemesisSignerAddress).toHex(); + + if (!presetData.harvestingMosaicId) { + if (!presetData.nemesis) { + throw new Error('nemesis must be defined!'); + } + if (presetData.nemesis.mosaics && presetData.nemesis.mosaics.length > 1) { + presetData.harvestingMosaicId = MosaicId.createFromNonce(MosaicNonce.createFromNumber(1), nemesisSignerAddress).toHex(); + } else { + presetData.harvestingMosaicId = presetData.currencyMosaicId; + } + } + + if (shouldCreateNemesis) { + if (oldAddresses) { + if (!oldPresetData) { + throw new Error('oldPresetData must be defined when upgrading!'); + } + // Nemesis configuration cannot be changed on upgrade. + addresses.mosaics = oldAddresses.mosaics; + presetData.nemesis = oldPresetData.nemesis; + } else { + if (presetData.nemesis.mosaics) { + const mosaics: MosaicAccounts[] = []; + presetData.nemesis.mosaics.forEach((m, mosaicIndex) => { + function sum(distribution: { amount: number; address: string }[]) { + return distribution + .map((d, index) => { + if (d.amount < 0) { + throw new Error( + `Nemesis distribution balance cannot be less than 0. Mosaic ${m.name}, distribution address: ${ + d.address + }, amount: ${d.amount}, index ${index}. \nDistributions are:\n${BootstrapUtils.toYaml( + distribution, + )}`, + ); + } + return d.amount; + }) + .reduce((a, b) => a + b, 0); + } + const accounts = this.generateAddresses(networkType, privateKeySecurityMode, m.accounts || 1); + const id = MosaicId.createFromNonce(MosaicNonce.createFromNumber(mosaicIndex), nemesisSignerAddress).toHex(); + mosaics.push({ + id: id, + name: m.name, + accounts, + }); + const getBalance = (nodeIndex: number): number | undefined => { + const node = presetData?.nodes?.[nodeIndex]; + if (!node) { + return undefined; + } + const balance = node?.balances?.[mosaicIndex]; + if (balance !== undefined) { + return balance; + } + if (node.excludeFromNemesis) { + return 0; + } + return undefined; + }; + const providedDistributions = [...(m.currencyDistributions || [])]; + (addresses.nodes || []).forEach((node, index) => { + const balance = getBalance(index); + if (node.main && balance !== undefined) + providedDistributions.push({ + address: node.main.address, + amount: balance, + }); + }); + const nodeMainAccounts = (addresses.nodes || []).filter( + (node, index) => node.main && getBalance(index) === undefined, + ); + const providedSupply = sum(providedDistributions); + const remainingSupply = m.supply - providedSupply; + const dynamicAccounts = accounts.length + nodeMainAccounts.length; + const amountPerAccount = Math.floor(remainingSupply / dynamicAccounts); + const maxHarvesterBalance = + (presetData.nemesis.mosaics.length == 1 && mosaicIndex == 0) || + (presetData.nemesis.mosaics.length > 1 && mosaicIndex == 1) + ? presetData.maxHarvesterBalance + : Number.MAX_SAFE_INTEGER; + const generatedAccounts = [ + ...accounts.map((a) => ({ + address: a.address, + amount: amountPerAccount, + })), + ...nodeMainAccounts.map((n) => ({ + address: n.main!.address, + amount: Math.min(maxHarvesterBalance, amountPerAccount), + })), + ]; + m.currencyDistributions = [...generatedAccounts, ...providedDistributions].filter((d) => d.amount > 0); + + const generatedSupply = sum(generatedAccounts.slice(1)); + + m.currencyDistributions[0].amount = m.supply - providedSupply - generatedSupply; + + const supplied = sum(m.currencyDistributions); + if (m.supply != supplied) { + throw new Error( + `Invalid nemgen total supplied value, expected ${ + m.supply + } but total is ${supplied}. \nDistributions are:\n${BootstrapUtils.toYaml(m.currencyDistributions)}`, + ); + } + }); + addresses.mosaics = mosaics; + } + } + } + + return addresses; + } + + public static shouldCreateNemesis(presetData: ConfigPreset): boolean { + return ( + presetData.nemesis && + !presetData.nemesisSeedFolder && + (BootstrapUtils.isYmlFile(presetData.preset) || + !existsSync(join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'presets', presetData.preset, 'seed'))) + ); + } + + public generateAddresses( + networkType: NetworkType, + privateKeySecurityMode: PrivateKeySecurityMode, + accounts: number | string[], + ): ConfigAccount[] { + if (typeof accounts == 'number') { + return ConfigLoader.getArray(accounts).map(() => ConfigLoader.toConfigFromAccount(Account.generateNewAccount(networkType))); + } else { + return accounts.map((key) => ConfigLoader.toConfigFromAccount(PublicAccount.createFromPublicKey(key, networkType))); + } + } + + public static toAccountFromKeys( + networkType: NetworkType, + publicKey: string | undefined, + privateKey: string | undefined, + ): PublicAccount | Account | undefined { + if (privateKey) { + const account = Account.createFromPrivateKey(privateKey, networkType); + if (publicKey && account.publicKey.toUpperCase() != publicKey.toUpperCase()) { + throw new Error('Invalid provided public key/private key!'); + } + return account; + } + if (publicKey) { + return PublicAccount.createFromPublicKey(publicKey, networkType); + } + return undefined; + } + + public static toConfigFromAccount(account: PublicAccount | Account): ConfigAccount { + // isntanceof doesn't work when loaded in multiple libraries. + //https://stackoverflow.com/questions/59265098/instanceof-not-work-correctly-in-typescript-library-project + if (account.constructor.name === Account.name) { + return { + privateKey: (account as Account).privateKey, + publicKey: account.publicKey, + address: account.address.plain(), + }; + } + return { + publicKey: account.publicKey, + address: account.address.plain(), + }; + } + + public static toConfigFromKeys( + networkType: NetworkType, + publicKey: string | undefined, + privateKey: string | undefined, + ): ConfigAccount | undefined { + const account = this.toAccountFromKeys(networkType, publicKey, privateKey); + if (!account) { + return undefined; + } + return this.toConfigFromAccount(account); + } + + public async generateAccount( + accountResolver: AccountResolver, + networkType: NetworkType, + privateKeySecurityMode: PrivateKeySecurityMode, + keyName: KeyName, + nodeName: string, + oldStoredAccount: ConfigAccount | undefined, + newProvidedAccount: ConfigAccount | undefined, + ): Promise { + const oldAccount = ConfigLoader.toAccountFromKeys( + networkType, + oldStoredAccount?.publicKey.toUpperCase(), + oldStoredAccount?.privateKey?.toUpperCase(), + ); + const newAccount = ConfigLoader.toAccountFromKeys( + networkType, + newProvidedAccount?.publicKey?.toUpperCase(), + newProvidedAccount?.privateKey?.toUpperCase(), + ); + + const getAccountLog = (account: Account | PublicAccount) => + `${keyName} Account ${account.address.plain()} Public Key ${account.publicKey} `; + + if (oldAccount && !newAccount) { + this.logger.info(`Reusing ${getAccountLog(oldAccount)}...`); + return ConfigLoader.toConfigFromAccount(oldAccount); + } + if (!oldAccount && newAccount) { + this.logger.info(`${getAccountLog(newAccount)} has been provided`); + return ConfigLoader.toConfigFromAccount(newAccount); + } + if (oldAccount && newAccount) { + if (oldAccount.address.equals(newAccount.address)) { + this.logger.info(`Reusing ${getAccountLog(newAccount)}`); + return { ...ConfigLoader.toConfigFromAccount(oldAccount), ...ConfigLoader.toConfigFromAccount(newAccount) }; + } + this.logger.info(`Old ${getAccountLog(oldAccount)} has been changed. New ${getAccountLog(newAccount)} replaces it.`); + return ConfigLoader.toConfigFromAccount(newAccount); + } + // + //Generation validation. + const generateError = (): string | undefined => { + if ( + keyName === KeyName.Main && + (privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_ALL || + privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT || + privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_MAIN) + ) { + return `Account ${keyName} cannot be generated when Private Key Security Mode is ${privateKeySecurityMode}. Account won't be stored anywhere!. Please use ${PrivateKeySecurityMode.ENCRYPT}, or provider your ${keyName} account with custom presets!`; + } + if ( + keyName === KeyName.Transport && + (privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_ALL || + privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT) + ) { + return `Account ${keyName} cannot be generated when Private Key Security Mode is ${privateKeySecurityMode}. Account won't be stored anywhere!. Please use ${PrivateKeySecurityMode.ENCRYPT}, ${PrivateKeySecurityMode.PROMPT_MAIN}, or provider your ${keyName} account with custom presets!`; + } else { + if (privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_ALL) { + return `Account ${keyName} cannot be generated when Private Key Security Mode is ${privateKeySecurityMode}. Account won't be stored anywhere! Please use ${PrivateKeySecurityMode.ENCRYPT}, ${PrivateKeySecurityMode.PROMPT_MAIN}, ${PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT}, or provider your ${keyName} account with custom presets!`; + } + } + return undefined; + }; + + const generateErrorMessage = generateError(); + + const account = await accountResolver.resolveAccount( + networkType, + newProvidedAccount || oldStoredAccount, + keyName, + nodeName, + 'initialization', + generateErrorMessage, + ); + return ConfigLoader.toConfigFromAccount(account); + } + + public async generateNodeAccount( + accountResolver: AccountResolver, + oldNodeAccount: NodeAccount | undefined, + presetData: ConfigPreset, + index: number, + nodePreset: NodePreset, + networkType: NetworkType, + ): Promise { + const privateKeySecurityMode = CryptoUtils.getPrivateKeySecurityMode(presetData.privateKeySecurityMode); + const name = nodePreset.name || `node-${index}`; + const main = await this.generateAccount( + accountResolver, + networkType, + privateKeySecurityMode, + KeyName.Main, + nodePreset.name, + oldNodeAccount?.main, + ConfigLoader.toConfigFromKeys(networkType, nodePreset.mainPublicKey, nodePreset.mainPrivateKey), + ); + const transport = await this.generateAccount( + accountResolver, + networkType, + privateKeySecurityMode, + KeyName.Transport, + nodePreset.name, + oldNodeAccount?.transport, + ConfigLoader.toConfigFromKeys(networkType, nodePreset.transportPublicKey, nodePreset.transportPrivateKey), + ); + + const friendlyName = nodePreset.friendlyName || main.publicKey.substr(0, 7); + + const nodeAccount: NodeAccount = { + name, + friendlyName, + roles: ConfigLoader.resolveRoles(nodePreset), + main: main, + transport: transport, + }; + + const useRemoteAccount = nodePreset.nodeUseRemoteAccount || presetData.nodeUseRemoteAccount; + + if (useRemoteAccount && (nodePreset.harvesting || nodePreset.voting)) + nodeAccount.remote = await this.generateAccount( + accountResolver, + networkType, + privateKeySecurityMode, + KeyName.Remote, + nodePreset.name, + oldNodeAccount?.remote, + ConfigLoader.toConfigFromKeys(networkType, nodePreset.remotePublicKey, nodePreset.remotePrivateKey), + ); + if (nodePreset.harvesting) + nodeAccount.vrf = await this.generateAccount( + accountResolver, + networkType, + privateKeySecurityMode, + KeyName.VRF, + nodePreset.name, + oldNodeAccount?.vrf, + ConfigLoader.toConfigFromKeys(networkType, nodePreset.vrfPublicKey, nodePreset.vrfPrivateKey), + ); + if (nodePreset.rewardProgram) + nodeAccount.agent = await this.generateAccount( + accountResolver, + networkType, + privateKeySecurityMode, + KeyName.Agent, + nodePreset.name, + oldNodeAccount?.agent, + ConfigLoader.toConfigFromKeys(networkType, nodePreset.agentPublicKey, nodePreset.agentPrivateKey), + ); + return nodeAccount; + } + + public async generateNodeAccounts( + accountResolver: AccountResolver, + oldAddresses: Addresses | undefined, + presetData: ConfigPreset, + networkType: NetworkType, + ): Promise { + return Promise.all( + presetData.nodes!.map((node, index) => + this.generateNodeAccount(accountResolver, oldAddresses?.nodes?.[index], presetData, index, node, networkType), + ), + ); + } + + private static getArray(size: number): number[] { + return [...Array(size).keys()]; + } + + public loadCustomPreset(customPreset: string | undefined, password: Password): CustomPreset { + if (!customPreset) { + return {}; + } + if (!existsSync(customPreset)) { + throw new KnownError( + `Custom preset '${customPreset}' doesn't exist. Have you provided the right --customPreset ?`, + ); + } + return BootstrapUtils.loadYaml(customPreset, password); + } + + public static loadAssembly(preset: string, assembly: string, workingDir: string): CustomPreset { + if (BootstrapUtils.isYmlFile(assembly)) { + const assemblyFile = join(workingDir, assembly); + if (!existsSync(assemblyFile)) { + throw new KnownError( + `Assembly '${assembly}' does not exist. Have you provided the right --preset --assembly ?`, + ); + } + return BootstrapUtils.loadYaml(assemblyFile, false); + } + const fileLocation = `${BootstrapUtils.DEFAULT_ROOT_FOLDER}/presets/assemblies/assembly-${assembly}.yml`; + if (existsSync(fileLocation)) { + return BootstrapUtils.loadYaml(fileLocation, false); + } + throw new KnownError( + `Assembly '${assembly}' is not valid for preset '${preset}'. Have you provided the right --preset --assembly ?`, + ); + } + + public static loadNetworkPreset(preset: string, workingDir: string): CustomPreset { + if (BootstrapUtils.isYmlFile(preset)) { + const presetFile = join(workingDir, preset); + if (!existsSync(presetFile)) { + throw new KnownError(`Preset '${presetFile}' does not exist. Have you provided the right --preset `); + } + return BootstrapUtils.loadYaml(presetFile, false); + } + const bundledPreset = `${BootstrapUtils.DEFAULT_ROOT_FOLDER}/presets/${preset}/network.yml`; + if (!existsSync(bundledPreset)) { + throw new KnownError(`Preset '${preset}' does not exist. Have you provided the right --preset `); + } + return BootstrapUtils.loadYaml(bundledPreset, false); + } + + public static loadSharedPreset(): CustomPreset { + return BootstrapUtils.loadYaml(join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'presets', 'shared.yml'), false) as ConfigPreset; + } + + public mergePresets(object: T | undefined, ...otherArgs: (CustomPreset | undefined)[]): T { + const presets = [object, ...otherArgs]; + const inflation: Record = presets.reverse().find((p) => p?.inflation)?.inflation || {}; + const presetData = _.merge({}, ...presets.reverse()); + if (!_.isEmpty(inflation)) presetData.inflation = inflation; + return presetData; + } + + public createPresetData(params: { + workingDir: string; + password: Password; + preset?: string; + assembly?: string; + customPreset?: string; + customPresetObject?: CustomPreset; + oldPresetData?: ConfigPreset; + }): ConfigPreset { + const customPreset = params.customPreset; + const customPresetObject = params.customPresetObject; + const oldPresetData = params.oldPresetData; + const customPresetFileObject = this.loadCustomPreset(customPreset, params.password); + const preset = params.preset || params.customPresetObject?.preset || customPresetFileObject?.preset || oldPresetData?.preset; + if (!preset) { + throw new KnownError('Preset value could not be resolved from target folder contents. Please provide the --preset parameter.'); + } + const assembly = + params.assembly || + params.customPresetObject?.assembly || + customPresetFileObject?.assembly || + params.oldPresetData?.assembly || + Assembly.dual; + + const sharedPreset = ConfigLoader.loadSharedPreset(); + const networkPreset = ConfigLoader.loadNetworkPreset(preset, params.workingDir); + const assemblyPreset = ConfigLoader.loadAssembly(preset, assembly, params.workingDir); + const providedCustomPreset = this.mergePresets(customPresetFileObject, customPresetObject); + const resolvedCustomPreset = _.isEmpty(providedCustomPreset) ? oldPresetData?.customPresetCache || {} : providedCustomPreset; + const presetData = this.mergePresets(sharedPreset, networkPreset, assemblyPreset, resolvedCustomPreset) as ConfigPreset; + + if (!ConfigLoader.presetInfoLogged) { + this.logger.info(`Generating config from preset '${preset}'`); + if (assembly) { + this.logger.info(`Using assembly '${assembly}'`); + } + if (customPreset) { + this.logger.info(`Using custom preset file '${customPreset}'`); + } + } + ConfigLoader.presetInfoLogged = true; + const presetDataWithDynamicDefaults: ConfigPreset = { + ...presetData, + version: 1, + preset: preset, + assembly: assembly || '', + nodes: this.dynamicDefaultNodeConfiguration(presetData.nodes), + customPresetCache: resolvedCustomPreset, + }; + return this.expandRepeat(presetDataWithDynamicDefaults as ConfigPreset); + } + + public dynamicDefaultNodeConfiguration(nodes?: Partial[]): NodePreset[] { + return _.map(nodes || [], (node) => { + return { ...this.getDefaultConfiguration(node), ...node } as NodePreset; + }); + } + + private getDefaultConfiguration(node: Partial): Partial { + if (node.harvesting && node.api) { + return { + syncsource: true, + filespooling: true, + partialtransaction: true, + addressextraction: true, + mongo: true, + zeromq: true, + enableAutoSyncCleanup: false, + }; + } + if (node.api) { + return { + syncsource: false, + filespooling: true, + partialtransaction: true, + addressextraction: true, + mongo: true, + zeromq: true, + enableAutoSyncCleanup: false, + }; + } + // peer only (harvesting or not). + return { + syncsource: true, + filespooling: false, + partialtransaction: false, + addressextraction: false, + mongo: false, + zeromq: false, + enableAutoSyncCleanup: true, + }; + } + + public static resolveRoles(nodePreset: NodePreset): string { + if (nodePreset.roles) { + return nodePreset.roles; + } + const roles: string[] = []; + if (nodePreset.syncsource) { + roles.push('Peer'); + } + if (nodePreset.api) { + roles.push('Api'); + } + if (nodePreset.voting) { + roles.push('Voting'); + } + return roles.join(','); + } + + public expandRepeat(presetData: ConfigPreset): ConfigPreset { + return { + ...presetData, + databases: this.expandServicesRepeat(presetData, presetData.databases || []), + nodes: this.expandServicesRepeat(presetData, presetData.nodes || []), + gateways: this.expandServicesRepeat(presetData, presetData.gateways || []), + explorers: this.expandServicesRepeat(presetData, presetData.explorers || []), + wallets: this.expandServicesRepeat(presetData, presetData.wallets || []), + faucets: this.expandServicesRepeat(presetData, presetData.faucets || []), + nemesis: this.applyValueTemplate(presetData, presetData.nemesis), + }; + } + + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + public applyValueTemplate(context: any, value: any): any { + if (!value) { + return value; + } + if (_.isArray(value)) { + return this.expandServicesRepeat(context, value as []); + } + + if (_.isObject(value)) { + return _.mapValues(value, (v: any) => this.applyValueTemplate({ ...context, ...value }, v)); + } + + if (!_.isString(value)) { + return value; + } + return BootstrapUtils.runTemplate(value, context); + } + + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + public expandServicesRepeat(context: any, services: any[]): any[] { + return _.flatMap(services || [], (service) => { + if (!_.isObject(service)) { + return service; + } + const repeat = (service as any).repeat; + if (repeat === 0) { + return []; + } + return _.range(repeat || 1).map((index) => { + return _.omit( + _.mapValues(service, (v: any) => + this.applyValueTemplate( + { + ...context, + ...service, + $index: index, + }, + v, + ), + ), + 'repeat', + ); + }); + }); + } + + public loadExistingPresetDataIfPreset(target: string, password: Password): ConfigPreset | undefined { + const generatedPresetLocation = this.getGeneratedPresetLocation(target); + if (existsSync(generatedPresetLocation)) { + return BootstrapUtils.loadYaml(generatedPresetLocation, password); + } + return undefined; + } + + public loadExistingPresetData(target: string, password: Password): ConfigPreset { + const presetData = this.loadExistingPresetDataIfPreset(target, password); + if (!presetData) { + throw new Error( + `The file ${this.getGeneratedPresetLocation( + target, + )} doesn't exist. Have you executed the 'config' command? Have you provided the right --target param?`, + ); + } + return presetData; + } + + public loadExistingAddressesIfPreset(target: string, password: Password): Addresses | undefined { + const generatedAddressLocation = this.getGeneratedAddressLocation(target); + if (existsSync(generatedAddressLocation)) { + const presetData = this.loadExistingPresetData(target, password); + return this.migrateAddresses(BootstrapUtils.loadYaml(generatedAddressLocation, password), presetData.networkType); + } + return undefined; + } + + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + public migrateAddresses(addresses: any, networkType: NetworkType): Addresses { + const migrations = this.getAddressesMigration(networkType); + return BootstrapUtils.migrate(this.logger, 'addresses.yml', addresses, migrations); + } + + public getAddressesMigration(networkType: NetworkType): Migration[] { + return [ + { + description: 'Key names migration', + + migrate(from: any): any { + (from.nodes || []).forEach((nodeAddresses: any): any => { + if (nodeAddresses.signing) { + nodeAddresses.main = nodeAddresses.signing; + } else { + if (nodeAddresses.ssl) { + nodeAddresses.main = ConfigLoader.toConfigFromAccount( + Account.createFromPrivateKey(nodeAddresses.ssl.privateKey, networkType), + ); + } + } + nodeAddresses.transport = ConfigLoader.toConfigFromKeys( + networkType, + nodeAddresses?.node?.publicKey, + nodeAddresses?.node?.privateKey, + ); + if (!nodeAddresses.transport) { + nodeAddresses.transport = ConfigLoader.toConfigFromAccount(Account.generateNewAccount(networkType)); + } + delete nodeAddresses.node; + delete nodeAddresses.signing; + delete nodeAddresses.ssl; + }); + return from; + }, + }, + ]; + } + + public loadExistingAddresses(target: string, password: Password): Addresses { + const addresses = this.loadExistingAddressesIfPreset(target, password); + if (!addresses) { + throw new Error( + `The file ${this.getGeneratedAddressLocation( + target, + )} doesn't exist. Have you executed the 'config' command? Have you provided the right --target param?`, + ); + } + return addresses; + } + + public getGeneratedPresetLocation(target: string): string { + return join(target, 'preset.yml'); + } + + public getGeneratedAddressLocation(target: string): string { + return join(target, 'addresses.yml'); + } +} diff --git a/packages/bootstrap-core/src/service/ConfigService.ts b/packages/bootstrap-core/src/service/ConfigService.ts new file mode 100644 index 000000000..db62cba80 --- /dev/null +++ b/packages/bootstrap-core/src/service/ConfigService.ts @@ -0,0 +1,799 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as fs from 'fs'; +import { copyFileSync, existsSync, promises as fsPromises } from 'fs'; +import * as _ from 'lodash'; +import { join } from 'path'; +import { + Account, + AccountKeyLinkTransaction, + Convert, + Deadline, + LinkAction, + NamespaceId, + Transaction, + TransactionMapping, + UInt64, + VotingKeyLinkTransaction, + VrfKeyLinkTransaction, +} from 'symbol-sdk'; +import { Logger } from '../logger'; +import { Addresses, ConfigPreset, CustomPreset, GatewayConfigPreset, NodeAccount, NodePreset, NodeType } from '../model'; +import { AccountResolver, DefaultAccountResolver } from './AccountResolver'; +import { AgentCertificateService } from './AgentCertificateService'; +import { BootstrapUtils, KnownError, Password } from './BootstrapUtils'; +import { CertificateService } from './CertificateService'; +import { ConfigLoader } from './ConfigLoader'; +import { CryptoUtils } from './CryptoUtils'; +import { NemgenService } from './NemgenService'; +import { RemoteNodeService } from './RemoteNodeService'; +import { ReportParams, ReportService } from './ReportService'; +import { RewardProgramUtils } from './RewardProgramUtils'; +import { VotingParams, VotingService } from './VotingService'; + +/** + * Defined presets. + */ +export enum Preset { + dualCurrency = 'dualCurrency', + singleCurrency = 'singleCurrency', + testnet = 'testnet', + mainnet = 'mainnet', +} + +export enum Assembly { + api = 'api', + demo = 'demo', + dual = 'dual', + multinode = 'multinode', + peer = 'peer', +} + +export enum KeyName { + Main = 'Main', + Remote = 'Remote', + Transport = 'Transport', + Voting = 'Voting', + VRF = 'VRF', + Agent = 'Agent', + NemesisSigner = 'Nemesis Signer', + NemesisAccount = 'Nemesis Account', +} + +export interface ConfigParams extends VotingParams, ReportParams { + report: boolean; + reset: boolean; + upgrade: boolean; + workingDir: string; + offline?: boolean; + preset?: string; + target: string; + password?: Password; + user: string; + assembly?: string; + customPreset?: string; + customPresetObject?: CustomPreset; + accountResolver: AccountResolver; +} + +export interface ConfigResult { + addresses: Addresses; + presetData: ConfigPreset; +} + +export class ConfigService { + public static defaultParams: ConfigParams = { + target: BootstrapUtils.defaultTargetFolder, + workingDir: BootstrapUtils.defaultWorkingDir, + report: false, + offline: false, + reset: false, + upgrade: false, + user: BootstrapUtils.CURRENT_USER, + accountResolver: new DefaultAccountResolver(), + }; + private readonly configLoader: ConfigLoader; + + constructor(private readonly logger: Logger, private readonly params: ConfigParams) { + this.configLoader = new ConfigLoader(logger); + } + + public resolveConfigPreset(password: Password): ConfigPreset { + const target = this.params.target; + const presetLocation = this.configLoader.getGeneratedPresetLocation(target); + if (fs.existsSync(presetLocation) && !this.params.upgrade) { + return this.configLoader.loadExistingPresetData(target, password); + } + const oldPresetData = this.configLoader.loadExistingPresetDataIfPreset(target, password); + return this.resolveCurrentPresetData(oldPresetData, password); + } + + public async run(): Promise { + const target = this.params.target; + try { + if (this.params.reset) { + BootstrapUtils.deleteFolder(this.logger, target); + } + const presetLocation = this.configLoader.getGeneratedPresetLocation(target); + const addressesLocation = this.configLoader.getGeneratedAddressLocation(target); + const password = this.params.password; + if (fs.existsSync(presetLocation) && !this.params.upgrade) { + this.logger.info( + `The generated preset ${presetLocation} already exist, ignoring configuration. (run -r to reset or --upgrade to upgrade)`, + ); + const presetData = this.configLoader.loadExistingPresetData(target, password); + const addresses = this.configLoader.loadExistingAddresses(target, password); + if (this.params.report) { + await new ReportService(this.logger, this.params).run(presetData); + } + return { presetData, addresses }; + } + + const oldPresetData = this.configLoader.loadExistingPresetDataIfPreset(target, password); + const oldAddresses = this.configLoader.loadExistingAddressesIfPreset(target, password); + + if (oldAddresses && !oldPresetData) { + throw new KnownError(`Configuration cannot be upgraded without a previous ${presetLocation} file. (run -r to reset)`); + } + + if (!oldAddresses && oldPresetData) { + throw new KnownError(`Configuration cannot be upgraded without a previous ${addressesLocation} file. (run -r to reset)`); + } + + if (oldAddresses && oldPresetData) { + this.logger.info('Upgrading configuration...'); + } + + const presetData: ConfigPreset = this.resolveCurrentPresetData(oldPresetData, password); + const addresses = await this.configLoader.generateRandomConfiguration( + oldAddresses, + oldPresetData, + presetData, + this.params.accountResolver, + ); + + const privateKeySecurityMode = CryptoUtils.getPrivateKeySecurityMode(presetData.privateKeySecurityMode); + await BootstrapUtils.mkdir(target); + + this.cleanUpConfiguration(presetData); + await this.generateNodeCertificates(presetData, addresses); + await this.generateAgentCertificates(presetData, addresses); + await this.generateNodes(presetData, addresses); + await this.generateGateways(presetData); + await this.generateExplorers(presetData); + await this.generateWallets(presetData); + if (presetData.faucets && presetData.faucets.length) { + const addressesFaucet = oldAddresses?.faucets || []; + presetData.faucets.forEach((f, index) => { + const privateKey = f.privateKey || addressesFaucet[index]?.account?.privateKey; + const account = privateKey + ? ConfigLoader.toConfigFromAccount(Account.createFromPrivateKey(privateKey, presetData.networkType)) + : undefined; + addressesFaucet?.push({ + account: account, + }); + }); + addresses.faucets = addressesFaucet.find((f) => f.account?.privateKey) ? addressesFaucet : undefined; + } + + const isUpgrade = !!oldPresetData || !!oldAddresses; + await this.resolveNemesis(presetData, addresses, isUpgrade); + if (this.params.report) { + await new ReportService(this.logger, this.params).run(presetData); + } + await BootstrapUtils.writeYaml( + addressesLocation, + CryptoUtils.removePrivateKeysAccordingToSecurityMode(addresses, privateKeySecurityMode), + password, + ); + await BootstrapUtils.writeYaml(presetLocation, CryptoUtils.removePrivateKeys(presetData), password); + this.logger.info(`Configuration generated.`); + return { presetData, addresses }; + } catch (e) { + if (e.known) { + this.logger.error(e.message); + } else { + this.logger.error(`Unknown error generating the configuration. ${e.message}`); + this.logger.error(`The target folder '${target}' should be deleted!!!`); + this.logger.error(e); + } + throw e; + } + } + + private resolveCurrentPresetData(oldPresetData: ConfigPreset | undefined, password: Password) { + return this.configLoader.createPresetData({ ...this.params, password: password, oldPresetData }); + } + + private async resolveNemesis(presetData: ConfigPreset, addresses: Addresses, isUpgrade: boolean): Promise { + const target = this.params.target; + const nemesisSeedFolder = BootstrapUtils.getTargetNemesisFolder(target, false, 'seed'); + await BootstrapUtils.mkdir(nemesisSeedFolder); + if (ConfigLoader.shouldCreateNemesis(presetData)) { + if (isUpgrade) { + this.logger.info('Nemesis data cannot be generated when upgrading...'); + } else { + await BootstrapUtils.deleteFolder(this.logger, nemesisSeedFolder); + await BootstrapUtils.mkdir(nemesisSeedFolder); + await this.generateNemesisConfig(presetData, addresses); + await BootstrapUtils.validateSeedFolder(nemesisSeedFolder, `Is the generated nemesis seed a valid seed folder?`); + } + return; + } + if (isUpgrade) { + this.logger.info('Upgrading genesis on upgrade!'); + } + + const resolvePresetNemesisSeedFolder = (): string | undefined => { + if (!presetData.nemesisSeedFolder) { + return undefined; + } + if (existsSync(join(this.params.workingDir, presetData.nemesisSeedFolder, '00000', '00001.dat'))) { + return join(this.params.workingDir, presetData.nemesisSeedFolder); + } + return presetData.nemesisSeedFolder; + }; + + const presetNemesisSeedFolder = resolvePresetNemesisSeedFolder(); + if (presetNemesisSeedFolder) { + await BootstrapUtils.validateSeedFolder( + presetNemesisSeedFolder, + `Is the provided preset nemesisSeedFolder: ${presetNemesisSeedFolder} a valid seed folder?`, + ); + this.logger.info(`Using custom nemesis seed folder in ${presetNemesisSeedFolder}`); + await BootstrapUtils.deleteFolder(this.logger, nemesisSeedFolder); + await BootstrapUtils.mkdir(nemesisSeedFolder); + await BootstrapUtils.generateConfiguration({}, presetNemesisSeedFolder, nemesisSeedFolder); + await BootstrapUtils.validateSeedFolder( + nemesisSeedFolder, + `Is the ${presetData.preset} preset default seed a valid seed folder?`, + ); + return; + } + if (BootstrapUtils.isYmlFile(presetData.preset)) { + throw new KnownError(`Seed for preset ${presetData.preset} could not be found. Please provide 'nemesisSeedFolder'!`); + } else { + const networkNemesisSeed = join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'presets', presetData.preset, 'seed'); + if (existsSync(networkNemesisSeed)) { + await BootstrapUtils.deleteFolder(this.logger, nemesisSeedFolder); + await BootstrapUtils.mkdir(nemesisSeedFolder); + await BootstrapUtils.generateConfiguration({}, networkNemesisSeed, nemesisSeedFolder); + await BootstrapUtils.validateSeedFolder( + nemesisSeedFolder, + `Is the ${presetData.preset} preset default seed a valid seed folder?`, + ); + return; + } + this.logger.warn(`Seed for preset ${presetData.preset} could not be found in ${networkNemesisSeed}`); + throw new Error('Seed could not be found!!!!'); + } + } + + private async generateNodes(presetData: ConfigPreset, addresses: Addresses): Promise { + const currentFinalizationEpoch = this.params.offline + ? presetData.lastKnownNetworkEpoch + : await new RemoteNodeService(this.logger).resolveCurrentFinalizationEpoch( + presetData, + this.params.offline == undefined ? ConfigLoader.shouldCreateNemesis(presetData) : this.params.offline, + ); + await Promise.all( + (addresses.nodes || []).map( + async (account, index) => + await this.generateNodeConfiguration(account, index, presetData, addresses, currentFinalizationEpoch), + ), + ); + } + + private async generateNodeCertificates(presetData: ConfigPreset, addresses: Addresses): Promise { + await Promise.all( + (addresses.nodes || []).map(async (account) => { + return await new CertificateService(this.logger, this.params).run( + presetData.networkType, + presetData.symbolServerImage, + account.name, + { + main: account.main, + transport: account.transport, + }, + ); + }), + ); + } + + private async generateAgentCertificates(presetData: ConfigPreset, addresses: Addresses): Promise { + await Promise.all( + (addresses.nodes || []).map(async (account, index) => { + const node = presetData.nodes?.[index]; + if (node?.rewardProgram && account.agent) + await new AgentCertificateService(this.logger, this.params).run( + presetData.networkType, + presetData.symbolServerImage, + account.name, + { + agent: account.agent, + }, + ); + }), + ); + } + + private async generateNodeConfiguration( + account: NodeAccount, + index: number, + presetData: ConfigPreset, + addresses: Addresses, + currentFinalizationEpoch: number | undefined, + ) { + const copyFrom = join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'config', 'node'); + const name = account.name; + + const serverConfig = BootstrapUtils.getTargetNodesFolder(this.params.target, false, name, 'server-config'); + const brokerConfig = BootstrapUtils.getTargetNodesFolder(this.params.target, false, name, 'broker-config'); + const dataFolder = BootstrapUtils.getTargetNodesFolder(this.params.target, false, name, 'data'); + await BootstrapUtils.mkdir(dataFolder); + + const nodePreset = (presetData.nodes || [])[index]; + + const harvesterSigningAccount = nodePreset.harvesting + ? await this.params.accountResolver.resolveAccount( + presetData.networkType, + account.remote || account.main, + account.remote ? KeyName.Remote : KeyName.Main, + account.name, + 'storing the harvesterSigningPrivateKey in the server properties', + 'Should not generate!', + ) + : undefined; + const harvesterVrf = nodePreset.harvesting + ? await this.params.accountResolver.resolveAccount( + presetData.networkType, + account.vrf, + KeyName.VRF, + account.name, + 'storing the harvesterVrfPrivateKey in the server properties', + 'Should not generate!', + ) + : undefined; + + const beneficiaryAddress = nodePreset.beneficiaryAddress || presetData.beneficiaryAddress; + const generatedContext = { + name: name, + friendlyName: nodePreset?.friendlyName || account.friendlyName, + harvesterSigningPrivateKey: harvesterSigningAccount?.privateKey || '', + harvesterVrfPrivateKey: harvesterVrf?.privateKey || '', + unfinalizedBlocksDuration: nodePreset.voting + ? presetData.votingUnfinalizedBlocksDuration + : presetData.nonVotingUnfinalizedBlocksDuration, + beneficiaryAddress: beneficiaryAddress == undefined ? account.main.address : beneficiaryAddress, + roles: ConfigLoader.resolveRoles(nodePreset), + }; + const templateContext: any = { ...presetData, ...generatedContext, ...nodePreset }; + const excludeFiles: string[] = []; + + // Exclude files depending on the enabled extensions. To complete... + if (!templateContext.harvesting) { + excludeFiles.push('config-harvesting.properties'); + } + if (!templateContext.networkheight) { + excludeFiles.push('config-networkheight.properties'); + } + + if (nodePreset.rewardProgram) { + if (!nodePreset.host) { + throw new Error( + `Cannot create reward program configuration. You need to provide a host field in preset: ${nodePreset.name}`, + ); + } + const restService = presetData.gateways?.find((g) => g.apiNodeName == nodePreset.name); + if (!restService) { + throw new Error( + `Cannot create reward program configuration. There is not rest gateway for the api node: ${nodePreset.name}`, + ); + } + + const rewardProgram = RewardProgramUtils.getRewardProgram(nodePreset.rewardProgram); + templateContext.restGatewayUrl = nodePreset.restGatewayUrl || `http://${restService.host || nodePreset.host}:3000`; + templateContext.rewardProgram = rewardProgram; + templateContext.serverVersion = nodePreset.serverVersion || presetData.serverVersion; + templateContext.mainPublicKey = account.main.publicKey; + const copyFrom = join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'config', 'agent'); + const agentConfig = BootstrapUtils.getTargetNodesFolder(this.params.target, false, name, 'agent'); + await BootstrapUtils.generateConfiguration(templateContext, copyFrom, agentConfig, []); + } + + const serverRecoveryConfig = { + addressextractionRecovery: false, + mongoRecovery: false, + zeromqRecovery: false, + filespoolingRecovery: true, + hashcacheRecovery: true, + }; + + const brokerRecoveryConfig = { + addressextractionRecovery: true, + mongoRecovery: true, + zeromqRecovery: true, + filespoolingRecovery: false, + hashcacheRecovery: true, + }; + + this.logger.info(`Generating ${name} server configuration`); + await BootstrapUtils.generateConfiguration({ ...serverRecoveryConfig, ...templateContext }, copyFrom, serverConfig, excludeFiles); + const peersP2PFile = await this.generateP2PFile( + presetData, + addresses, + presetData.peersP2PListLimit, + serverConfig, + NodeType.PEER_NODE, + (nodePresetData) => !!nodePresetData.syncsource && nodePresetData != nodePreset, + 'peers-p2p.json', + ); + const peersApiFile = await this.generateP2PFile( + presetData, + addresses, + presetData.peersApiListLimit, + serverConfig, + NodeType.API_NODE, + (nodePresetData) => nodePresetData.api && nodePresetData != nodePreset, + 'peers-api.json', + ); + + if (nodePreset.brokerName) { + this.logger.info(`Generating ${nodePreset.brokerName} broker configuration`); + await BootstrapUtils.generateConfiguration( + { ...brokerRecoveryConfig, ...templateContext }, + copyFrom, + brokerConfig, + excludeFiles, + ); + copyFileSync(peersP2PFile, join(join(brokerConfig, 'resources', 'peers-p2p.json'))); + copyFileSync(peersApiFile, join(join(brokerConfig, 'resources', 'peers-api.json'))); + } + + await new VotingService(this.logger, this.params).run( + presetData, + account, + nodePreset, + currentFinalizationEpoch, + undefined, + ConfigLoader.shouldCreateNemesis(presetData), + ); + } + + private async generateP2PFile( + presetData: ConfigPreset, + addresses: Addresses, + listLimit: number, + outputFolder: string, + type: NodeType, + nodePresetDataFunction: (nodePresetData: NodePreset) => boolean, + jsonFileName: string, + ) { + const thisNetworkKnownPeers = (presetData.nodes || []) + .map((nodePresetData, index) => { + if (!nodePresetDataFunction(nodePresetData)) { + return undefined; + } + const node = (addresses.nodes || [])[index]; + return { + publicKey: node.main.publicKey, + endpoint: { + host: nodePresetData.host || '', + port: 7900, + }, + metadata: { + name: nodePresetData.friendlyName, + roles: ConfigLoader.resolveRoles(nodePresetData), + }, + }; + }) + .filter((i) => i); + const globalKnownPeers = presetData.knownPeers?.[type] || []; + const allPeers = [...thisNetworkKnownPeers, ...globalKnownPeers]; + const data = { + _info: `this file contains a list of ${type} peers`, + knownPeers: allPeers.length > listLimit ? _.sampleSize(allPeers, listLimit) : allPeers, + }; + const peerFile = join(outputFolder, `resources`, jsonFileName); + await fs.promises.writeFile(peerFile, JSON.stringify(data, null, 2)); + await fs.promises.chmod(peerFile, 0o600); + return peerFile; + } + + private async generateNemesisConfig(presetData: ConfigPreset, addresses: Addresses) { + if (!presetData.nemesis) { + throw new Error('nemesis must not be defined!'); + } + const target = this.params.target; + const nemesisWorkingDir = BootstrapUtils.getTargetNemesisFolder(target, false); + const transactionsDirectory = join(nemesisWorkingDir, presetData.nemesis.transactionsDirectory || presetData.transactionsDirectory); + await BootstrapUtils.mkdir(transactionsDirectory); + const copyFrom = join(BootstrapUtils.DEFAULT_ROOT_FOLDER, `config`, `nemesis`); + const moveTo = join(nemesisWorkingDir, `server-config`); + const templateContext = { ...(presetData as any), addresses }; + const nodes = (addresses.nodes || []).filter((n, index) => !presetData.nodes?.[index]?.excludeFromNemesis); + + await Promise.all(nodes.filter((n) => n.vrf).map((n) => this.createVrfTransaction(transactionsDirectory, presetData, n))); + await Promise.all( + nodes.filter((n) => n.remote).map((n) => this.createAccountKeyLinkTransaction(transactionsDirectory, presetData, n)), + ); + await Promise.all(nodes.map((n) => this.createVotingKeyTransactions(transactionsDirectory, presetData, n))); + + if (presetData.nemesis.transactions) { + const transactionHashes: string[] = []; + const transactions = ( + await Promise.all( + Object.entries(presetData.nemesis.transactions || {}) + .map(([key, payload]) => { + const transactionHash = Transaction.createTransactionHash( + payload, + Array.from(Convert.hexToUint8(presetData.nemesisGenerationHashSeed)), + ); + if (transactionHashes.indexOf(transactionHash) > -1) { + this.logger.warn(`Transaction ${key} wth hash ${transactionHash} already exist. Excluded from folder.`); + return undefined; + } + transactionHashes.push(transactionHash); + return this.storeTransaction(transactionsDirectory, key, payload); + }) + .filter((p) => p), + ) + ).filter((p) => p); + this.logger.info(`Found ${transactions.length} provided in transactions.`); + } + + await BootstrapUtils.generateConfiguration(templateContext, copyFrom, moveTo); + await new NemgenService(this.logger, this.params).run(presetData); + } + + private async createVrfTransaction(transactionsDirectory: string, presetData: ConfigPreset, node: NodeAccount): Promise { + if (!node.vrf) { + throw new Error('VRF keys should have been generated!!'); + } + if (!node.main) { + throw new Error('Main keys should have been generated!!'); + } + const deadline = Deadline.createFromDTO('1'); + const vrf = VrfKeyLinkTransaction.create(deadline, node.vrf.publicKey, LinkAction.Link, presetData.networkType, UInt64.fromUint(0)); + const account = await this.params.accountResolver.resolveAccount( + presetData.networkType, + node.main, + KeyName.Main, + node.name, + 'creating the vrf key link transactions', + 'Should not generate!', + ); + const signedTransaction = account.sign(vrf, presetData.nemesisGenerationHashSeed); + return await this.storeTransaction(transactionsDirectory, `vrf_${node.name}`, signedTransaction.payload); + } + + private async createAccountKeyLinkTransaction( + transactionsDirectory: string, + presetData: ConfigPreset, + node: NodeAccount, + ): Promise { + if (!node.remote) { + throw new Error('Remote keys should have been generated!!'); + } + if (!node.main) { + throw new Error('Main keys should have been generated!!'); + } + const deadline = Deadline.createFromDTO('1'); + const akl = AccountKeyLinkTransaction.create( + deadline, + node.remote.publicKey, + LinkAction.Link, + presetData.networkType, + UInt64.fromUint(0), + ); + const account = await this.params.accountResolver.resolveAccount( + presetData.networkType, + node.main, + KeyName.Main, + node.name, + 'creating the account link transactions', + 'Should not generate!', + ); + const signedTransaction = account.sign(akl, presetData.nemesisGenerationHashSeed); + return await this.storeTransaction(transactionsDirectory, `remote_${node.name}`, signedTransaction.payload); + } + + private async createVotingKeyTransactions( + transactionsDirectory: string, + presetData: ConfigPreset, + node: NodeAccount, + ): Promise { + const votingFiles = node.voting || []; + const account = await this.params.accountResolver.resolveAccount( + presetData.networkType, + node.main, + KeyName.Main, + node.name, + 'creating the voting key link transactions', + 'Should not generate!', + ); + return Promise.all( + votingFiles.map(async (votingFile) => { + const voting = VotingKeyLinkTransaction.create( + Deadline.createFromDTO('1'), + votingFile.publicKey, + votingFile.startEpoch, + votingFile.endEpoch, + LinkAction.Link, + presetData.networkType, + 1, + UInt64.fromUint(0), + ); + const signedTransaction = account.sign(voting, presetData.nemesisGenerationHashSeed); + return this.storeTransaction(transactionsDirectory, `voting_${node.name}`, signedTransaction.payload); + }), + ); + } + + private async storeTransaction(transactionsDirectory: string, name: string, payload: string): Promise { + const transaction = TransactionMapping.createFromPayload(payload); + await fs.promises.writeFile(`${transactionsDirectory}/${name}.bin`, Convert.hexToUint8(payload)); + return transaction as Transaction; + } + + private generateGateways(presetData: ConfigPreset) { + return Promise.all( + (presetData.gateways || []).map(async (gatewayPreset, index: number) => { + const copyFrom = join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'config', 'rest-gateway'); + const generatedContext: Partial = { + restDeploymentToolVersion: BootstrapUtils.VERSION, + restDeploymentToolLastUpdatedDate: new Date().toISOString().slice(0, 10), + }; + const templateContext = { ...generatedContext, ...presetData, ...gatewayPreset }; + const name = templateContext.name || `rest-gateway-${index}`; + const moveTo = BootstrapUtils.getTargetGatewayFolder(this.params.target, false, name); + await BootstrapUtils.generateConfiguration(templateContext, copyFrom, moveTo); + const apiNodeConfigFolder = BootstrapUtils.getTargetNodesFolder( + this.params.target, + false, + gatewayPreset.apiNodeName, + 'server-config', + 'resources', + ); + const apiNodeCertFolder = BootstrapUtils.getTargetNodesFolder(this.params.target, false, gatewayPreset.apiNodeName, 'cert'); + await BootstrapUtils.generateConfiguration( + {}, + apiNodeConfigFolder, + join(moveTo, 'api-node-config'), + [], + ['config-network.properties', 'config-node.properties'], + ); + await BootstrapUtils.generateConfiguration( + {}, + apiNodeCertFolder, + join(moveTo, 'api-node-config', 'cert'), + [], + ['node.crt.pem', 'node.key.pem', 'ca.cert.pem'], + ); + }), + ); + } + + private generateExplorers(presetData: ConfigPreset) { + return Promise.all( + (presetData.explorers || []).map(async (explorerPreset, index: number) => { + const copyFrom = join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'config', 'explorer'); + const mosaicPreset = presetData.nemesis.mosaics[0]; + const fullName = `${presetData.baseNamespace}.${mosaicPreset.name}`; + const namespaceId = new NamespaceId(fullName); + const { restNodes, defaultNode } = this.resolveRests(presetData); + const templateContext = { + namespaceName: fullName, + namespaceId: namespaceId.toHex(), + restNodes: restNodes, + defaultNode: defaultNode, + ...presetData, + ...explorerPreset, + }; + const name = templateContext.name || `explorer-${index}`; + const moveTo = BootstrapUtils.getTargetFolder(this.params.target, false, BootstrapUtils.targetExplorersFolder, name); + await BootstrapUtils.generateConfiguration(templateContext, copyFrom, moveTo); + }), + ); + } + + private generateWallets(presetData: ConfigPreset) { + return Promise.all( + (presetData.wallets || []).map(async (walletPreset, index: number) => { + const copyFrom = join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'config', 'wallet'); + const { restNodes, defaultNode } = this.resolveRests(presetData); + const templateContext = { + namespaceName: `${presetData.baseNamespace}.${presetData.nemesis.mosaics[0].name}`, + defaultNodeUrl: defaultNode, + restNodes: restNodes.map((url) => { + return { url: url, roles: 2, friendlyName: new URL(url).hostname }; + }), + ...presetData, + ...walletPreset, + }; + + const name = templateContext.name || `wallet-${index}`; + const moveTo = BootstrapUtils.getTargetFolder(this.params.target, false, BootstrapUtils.targetWalletsFolder, name); + await BootstrapUtils.generateConfiguration(templateContext, copyFrom, moveTo); + await fsPromises.chmod(join(moveTo, 'app.conf.js'), 0o777); + await fsPromises.chmod(join(moveTo, 'fees.conf.js'), 0o777); + await fsPromises.chmod(join(moveTo, 'network.conf.js'), 0o777); + await fsPromises.chmod(join(moveTo, 'profileImporter.html'), 0o777); + await Promise.all( + (walletPreset.profiles || []).map(async (profile) => { + if (!profile.name) { + throw new Error('Profile`s name must be provided in the wallets preset when creating wallet profiles.'); + } + const profileJsonFileName = `wallet-profile-${profile.name}.json`; + + const loadProfileData = async (): Promise => { + if (profile.data) { + return JSON.stringify(profile.data, null, 2); + } + if (profile.location) { + return BootstrapUtils.loadFileAsText(profile.location); + } + return BootstrapUtils.loadFileAsText(profileJsonFileName); + }; + + try { + const profileData = await loadProfileData(); + await BootstrapUtils.writeTextFile(join(moveTo, profileJsonFileName), profileData); + } catch (e) { + const message = `Cannot create Wallet profile with name '${profile.name}'. Do you have the file '${profileJsonFileName}' in the current folder?. ${e}`; + throw new Error(message); + } + }), + ); + }), + ); + } + + private resolveRests(presetData: ConfigPreset): { restNodes: string[]; defaultNode: string } { + const restNodes: string[] = []; + presetData.gateways?.forEach((restService) => { + const nodePreset = presetData.nodes?.find((g) => g.name == restService.apiNodeName); + restNodes.push(nodePreset?.restGatewayUrl || `http://${restService.host || nodePreset?.host || 'localhost'}:3000`); + }); + if (presetData.knownRestGateways) { + restNodes.push(...presetData.knownRestGateways); + } + return { restNodes: _.uniq(restNodes), defaultNode: restNodes[0] || 'http://localhost:3000' }; + } + + private cleanUpConfiguration(presetData: ConfigPreset) { + const target = this.params.target; + (presetData.nodes || []).forEach(({ name }) => { + const serverConfigFolder = BootstrapUtils.getTargetNodesFolder(target, false, name, 'server-config'); + BootstrapUtils.deleteFolder(this.logger, serverConfigFolder); + + const brokerConfigFolder = BootstrapUtils.getTargetNodesFolder(target, false, name, 'broker-config'); + BootstrapUtils.deleteFolder(this.logger, brokerConfigFolder); + + // Remove old user configs when upgrading. + const userConfigFolder = BootstrapUtils.getTargetNodesFolder(target, false, name, 'userconfig'); + BootstrapUtils.deleteFolder(this.logger, userConfigFolder); + + const seedFolder = BootstrapUtils.getTargetNodesFolder(target, false, name, 'seed'); + BootstrapUtils.deleteFolder(this.logger, seedFolder); + }); + (presetData.gateways || []).forEach(({ name }) => { + const configFolder = BootstrapUtils.getTargetGatewayFolder(target, false, name); + BootstrapUtils.deleteFolder(this.logger, configFolder); + }); + } +} diff --git a/src/service/CryptoUtils.ts b/packages/bootstrap-core/src/service/CryptoUtils.ts similarity index 96% rename from src/service/CryptoUtils.ts rename to packages/bootstrap-core/src/service/CryptoUtils.ts index b1aaeef1f..711b5a208 100644 --- a/src/service/CryptoUtils.ts +++ b/packages/bootstrap-core/src/service/CryptoUtils.ts @@ -141,6 +141,10 @@ export class CryptoUtils { } private static isPrivateKeyField(value: any, fieldName: string | undefined) { - return _.isString(value) && fieldName && fieldName.toLowerCase().endsWith('privatekey'); + return ( + _.isString(value) && + fieldName && + (fieldName.toLowerCase().endsWith('privatekey') || fieldName.toLowerCase().endsWith('private_key')) + ); } } diff --git a/packages/bootstrap-core/src/service/LinkTransactionGenericFactory.ts b/packages/bootstrap-core/src/service/LinkTransactionGenericFactory.ts new file mode 100644 index 000000000..064d04a2b --- /dev/null +++ b/packages/bootstrap-core/src/service/LinkTransactionGenericFactory.ts @@ -0,0 +1,334 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { + AccountInfo, + AccountKeyLinkTransaction, + Deadline, + LinkAction, + Transaction, + UInt64, + VotingKeyLinkTransaction, + VrfKeyLinkTransaction, +} from 'symbol-sdk'; +import { Logger } from '../logger'; +import { ConfigPreset, NodeAccount } from '../model'; +import { TransactionFactory, VotingKeyAccount } from '../service'; + +export type KeyAccount = { publicKey: string }; + +export interface LinkServiceTransactionFactoryParams { + presetData: ConfigPreset; + nodeAccount: NodeAccount; + mainAccountInfo: AccountInfo; + deadline: Deadline; + maxFee: UInt64; + latestFinalizedBlockEpoch?: number; +} + +export interface GenericNodeAccount { + remote?: KeyAccount; + vrf?: KeyAccount; + voting?: VotingKeyAccount[]; +} +export type ConfirmUnlink = (accountName: string, alreadyLinkedAccount: T, print: (account: T) => string) => Promise; + +export class LinkTransactionGenericFactory implements TransactionFactory { + constructor(private readonly logger: Logger, private readonly confirmUnlink: ConfirmUnlink, private readonly unlink: boolean) {} + + public async createTransactions({ + presetData, + nodeAccount, + mainAccountInfo, + deadline, + maxFee, + latestFinalizedBlockEpoch, + }: LinkServiceTransactionFactoryParams): Promise { + const networkType = presetData.networkType; + const nodeName = nodeAccount.name; + + const remoteTransactionFactory = ({ publicKey }: KeyAccount, action: LinkAction): AccountKeyLinkTransaction => + AccountKeyLinkTransaction.create(deadline, publicKey, action, networkType, maxFee); + const vrfTransactionFactory = ({ publicKey }: KeyAccount, action: LinkAction): VrfKeyLinkTransaction => + VrfKeyLinkTransaction.create(deadline, publicKey, action, networkType, maxFee); + const votingKeyTransactionFactory = (account: VotingKeyAccount, action: LinkAction): VotingKeyLinkTransaction => { + return VotingKeyLinkTransaction.create( + deadline, + account.publicKey, + account.startEpoch, + account.endEpoch, + action, + networkType, + 1, + maxFee, + ); + }; + + this.logger.info(`Creating transactions for node: ${nodeName}, ca/main account: ${mainAccountInfo.address.plain()}`); + const transactions = await this.createGenericTransactions( + nodeName, + { + vrf: mainAccountInfo.supplementalPublicKeys.vrf, + remote: mainAccountInfo.supplementalPublicKeys.linked, + voting: mainAccountInfo.supplementalPublicKeys.voting, + }, + nodeAccount, + latestFinalizedBlockEpoch || presetData.lastKnownNetworkEpoch, + remoteTransactionFactory, + vrfTransactionFactory, + votingKeyTransactionFactory, + ); + //Unlink transactions go first. + return transactions.sort((t1, t2) => t1.linkAction - t2.linkAction); + } + + public async createGenericTransactions( + nodeName: string, + currentMainAccountKeys: GenericNodeAccount, + nodeAccount: GenericNodeAccount, + latestFinalizedBlockEpoch: number, + remoteTransactionFactory: (keyAccount: KeyAccount, action: LinkAction) => AccountKL, + vrfTransactionFactory: (keyAccount: KeyAccount, action: LinkAction) => VRFKL, + votingKeyTransactionFactory: (account: VotingKeyAccount, action: LinkAction) => VotingKL, + ): Promise<(AccountKL | VRFKL | VotingKL)[]> { + const transactions: (AccountKL | VRFKL | VotingKL)[] = []; + const print = (account: { publicKey: string }) => `public key ${account.publicKey}`; + if (nodeAccount.remote) { + transactions.push( + ...(await this.addTransaction( + currentMainAccountKeys.remote, + remoteTransactionFactory, + nodeName, + 'Remote', + nodeAccount.remote, + print, + )), + ); + } + + if (nodeAccount.vrf) { + transactions.push( + ...(await this.addTransaction(currentMainAccountKeys.vrf, vrfTransactionFactory, nodeName, 'VRF', nodeAccount.vrf, print)), + ); + } + const votingPrint = (account: VotingKeyAccount) => + `public key ${account.publicKey}, start epoch ${account.startEpoch}, end epoch ${account.endEpoch}`; + if (this.unlink) { + transactions.push( + ...(await this.addVotingKeyUnlinkTransactions( + currentMainAccountKeys?.voting || [], + nodeAccount.voting || [], + nodeName, + votingKeyTransactionFactory, + votingPrint, + )), + ); + } else { + transactions.push( + ...(await this.addVotingKeyLinkTransactions( + currentMainAccountKeys?.voting || [], + nodeAccount.voting || [], + nodeName, + latestFinalizedBlockEpoch, + votingKeyTransactionFactory, + votingPrint, + )), + ); + } + return transactions; + } + + public async addVotingKeyLinkTransactions( + linkedVotingKeyAccounts: VotingKeyAccount[], + votingKeyFiles: VotingKeyAccount[], + nodeName: string, + lastKnownNetworkEpoch: number, + transactionFactory: (transaction: VotingKeyAccount, action: LinkAction) => T, + print: (account: VotingKeyAccount) => string, + ): Promise { + const transactions: T[] = []; + const accountName = 'Voting'; + let remainingVotingKeys: VotingKeyAccount[] = linkedVotingKeyAccounts; + for (const alreadyLinkedAccount of linkedVotingKeyAccounts) { + if ( + alreadyLinkedAccount.endEpoch < lastKnownNetworkEpoch && + (await this.confirmUnlink(accountName, alreadyLinkedAccount, print)) + ) { + const unlinkTransaction = transactionFactory(alreadyLinkedAccount, LinkAction.Unlink); + this.logger.info( + `Creating Unlink ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print(alreadyLinkedAccount)}.`, + ); + remainingVotingKeys = remainingVotingKeys.filter((a) => a != alreadyLinkedAccount); + transactions.push(unlinkTransaction); + } + } + const activeVotingKeyFiles = votingKeyFiles.filter((a) => a.endEpoch >= lastKnownNetworkEpoch); + for (const accountTobeLinked of activeVotingKeyFiles) { + const alreadyLinkedAccount = remainingVotingKeys.find((a) => + LinkTransactionGenericFactory.overlapsVotingAccounts(accountTobeLinked, a), + ); + const isAlreadyLinkedSameAccount = + alreadyLinkedAccount?.publicKey.toUpperCase() === accountTobeLinked.publicKey.toUpperCase() && + alreadyLinkedAccount?.startEpoch === accountTobeLinked.startEpoch && + alreadyLinkedAccount?.endEpoch === accountTobeLinked.endEpoch; + + let addTransaction = !isAlreadyLinkedSameAccount; + if (alreadyLinkedAccount && !isAlreadyLinkedSameAccount) { + this.logger.warn( + `Node ${nodeName} is already linked to ${accountName} ${print( + alreadyLinkedAccount, + )} which is different from the configured ${print(accountTobeLinked)}.`, + ); + if (await this.confirmUnlink(accountName, alreadyLinkedAccount, print)) { + const unlinkTransaction = transactionFactory(alreadyLinkedAccount, LinkAction.Unlink); + this.logger.info( + `Creating Unlink ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print( + alreadyLinkedAccount, + )}.`, + ); + remainingVotingKeys = remainingVotingKeys.filter((a) => a != alreadyLinkedAccount); + transactions.push(unlinkTransaction); + } else { + addTransaction = false; + } + } + + if (remainingVotingKeys.length < 3 && addTransaction) { + const transaction = transactionFactory(accountTobeLinked, LinkAction.Link); + this.logger.info( + `Creating Link ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print(accountTobeLinked)}.`, + ); + transactions.push(transaction); + remainingVotingKeys.push(accountTobeLinked); + } + } + return transactions; + } + + public async addVotingKeyUnlinkTransactions( + linkedVotingKeyAccounts: VotingKeyAccount[], + votingKeyFiles: VotingKeyAccount[], + nodeName: string, + transactionFactory: (transaction: VotingKeyAccount, action: LinkAction) => T, + print: (account: VotingKeyAccount) => string, + ): Promise { + const transactions: T[] = []; + const accountName = 'Voting'; + let remainingVotingKeys: VotingKeyAccount[] = linkedVotingKeyAccounts; + for (const accountTobeLinked of votingKeyFiles) { + const alreadyLinkedAccount = remainingVotingKeys.find((a) => + LinkTransactionGenericFactory.overlapsVotingAccounts(accountTobeLinked, a), + ); + const isAlreadyLinkedSameAccount = + alreadyLinkedAccount?.publicKey.toUpperCase() === accountTobeLinked.publicKey.toUpperCase() && + alreadyLinkedAccount?.startEpoch === accountTobeLinked.startEpoch && + alreadyLinkedAccount?.endEpoch === accountTobeLinked.endEpoch; + + if (alreadyLinkedAccount && isAlreadyLinkedSameAccount) { + if (await this.confirmUnlink(accountName, alreadyLinkedAccount, print)) { + const unlinkTransaction = transactionFactory(alreadyLinkedAccount, LinkAction.Unlink); + this.logger.info( + `Creating Unlink ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print( + alreadyLinkedAccount, + )}.`, + ); + remainingVotingKeys = remainingVotingKeys.filter((a) => a != alreadyLinkedAccount); + transactions.push(unlinkTransaction); + } + } + } + return transactions; + } + + public static overlapsVotingAccounts(x: VotingKeyAccount, y: VotingKeyAccount): boolean { + return x.endEpoch >= y.startEpoch && x.startEpoch <= y.endEpoch; + } + + private async addTransaction( + alreadyLinkedAccount: A | undefined, + transactionFactory: (transaction: A, action: LinkAction) => T, + nodeName: string, + accountName: string, + accountTobeLinked: A, + print: (account: A) => string, + ): Promise { + const transactions: T[] = []; + const isAlreadyLinkedSameAccount = accountTobeLinked.publicKey.toUpperCase() === alreadyLinkedAccount?.publicKey.toUpperCase(); + if (this.unlink) { + if (alreadyLinkedAccount) { + if (isAlreadyLinkedSameAccount) { + const transaction = transactionFactory(accountTobeLinked, LinkAction.Unlink); + this.logger.info( + `Creating Unlink ${accountName} Transaction for node ${nodeName} to ${accountName} ${print(accountTobeLinked)}.`, + ); + transactions.push(transaction); + } else { + this.logger.warn( + `Node ${nodeName} is linked to a different ${accountName} ${print( + alreadyLinkedAccount, + )} and not the configured ${print(accountTobeLinked)}.`, + ); + + if (await this.confirmUnlink(accountName, alreadyLinkedAccount, print)) { + const transaction = transactionFactory(alreadyLinkedAccount, LinkAction.Unlink); + this.logger.info( + `Creating Unlink ${accountName} Transaction for node ${nodeName} to ${accountName} ${print( + alreadyLinkedAccount, + )}.`, + ); + transactions.push(transaction); + } + } + } else { + this.logger.info(`Node ${nodeName} is not linked to ${accountName} ${print(accountTobeLinked)}.`); + } + } else { + if (alreadyLinkedAccount) { + if (isAlreadyLinkedSameAccount) { + this.logger.info(`Node ${nodeName} is already linked to ${accountName} ${print(alreadyLinkedAccount)}.`); + } else { + this.logger.warn( + `Node ${nodeName} is already linked to ${accountName} ${print( + alreadyLinkedAccount, + )} which is different from the configured ${print(accountTobeLinked)}.`, + ); + + if (await this.confirmUnlink(accountName, alreadyLinkedAccount, print)) { + const unlinkTransaction = transactionFactory(alreadyLinkedAccount, LinkAction.Unlink); + this.logger.info( + `Creating Unlink ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print( + alreadyLinkedAccount, + )}.`, + ); + transactions.push(unlinkTransaction); + + const linkTransaction = transactionFactory(accountTobeLinked, LinkAction.Link); + this.logger.info( + `Creating Link ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print(accountTobeLinked)}.`, + ); + transactions.push(linkTransaction); + } + } + } else { + const transaction = transactionFactory(accountTobeLinked, LinkAction.Link); + this.logger.info( + `Creating Link ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print(accountTobeLinked)}.`, + ); + transactions.push(transaction); + } + } + return transactions; + } +} diff --git a/src/service/NemgenService.ts b/packages/bootstrap-core/src/service/NemgenService.ts similarity index 77% rename from src/service/NemgenService.ts rename to packages/bootstrap-core/src/service/NemgenService.ts index 104bfea27..7af9b70b3 100644 --- a/src/service/NemgenService.ts +++ b/packages/bootstrap-core/src/service/NemgenService.ts @@ -16,19 +16,15 @@ import { promises } from 'fs'; import { join } from 'path'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { LogType } from '../logger/LogType'; +import { Logger } from '../logger'; import { ConfigPreset } from '../model'; import { BootstrapUtils } from './BootstrapUtils'; import { ConfigParams } from './ConfigService'; type NemgenParams = ConfigParams; -const logger: Logger = LoggerFactory.getLogger(LogType.System); - export class NemgenService { - constructor(private readonly root: string, protected readonly params: NemgenParams) {} + constructor(private readonly logger: Logger, protected readonly params: NemgenParams) {} public async run(presetData: ConfigPreset): Promise { const networkIdentifier = presetData.networkIdentifier; @@ -40,9 +36,9 @@ export class NemgenService { } const nemesisWorkingDir = BootstrapUtils.getTargetNemesisFolder(target, true); - const nemesisSeedFolder = join(nemesisWorkingDir, `seed`, `${networkIdentifier}`, `0000`); + const nemesisSeedFolder = join(nemesisWorkingDir, `seed`, networkIdentifier, `0000`); await BootstrapUtils.mkdir(nemesisSeedFolder); - await promises.copyFile(join(this.root, `config`, `hashes.dat`), join(nemesisSeedFolder, `hashes.dat`)); + await promises.copyFile(join(BootstrapUtils.DEFAULT_ROOT_FOLDER, `config`, `hashes.dat`), join(nemesisSeedFolder, `hashes.dat`)); const name = presetData.nodes[0].name; const serverConfigWorkingDir = BootstrapUtils.getTargetNodesFolder(target, true, name, 'server-config'); @@ -57,8 +53,8 @@ export class NemgenService { const binds = [`${serverConfigWorkingDir}:/server-config`, `${nemesisWorkingDir}:/nemesis`]; - const userId = await BootstrapUtils.resolveDockerUserFromParam(this.params.user); - const { stdout, stderr } = await BootstrapUtils.runImageUsingExec({ + const userId = await BootstrapUtils.resolveDockerUserFromParam(this.logger, this.params.user); + const { stdout, stderr } = await BootstrapUtils.runImageUsingExec(this.logger, { catapultAppFolder: presetData.catapultAppFolder, image: symbolServerImage, userId: userId, @@ -68,10 +64,13 @@ export class NemgenService { }); if (stdout.indexOf('') > -1) { - logger.info(stdout); - logger.error(stderr); + this.logger.info(stdout); + this.logger.error(stderr); throw new Error('Nemgen failed. Check the logs!'); } - logger.info('Nemgen executed!!!!'); + // deleting unused statedb and hashes folder. + await BootstrapUtils.deleteFolder(this.logger, join(nemesisWorkingDir, 'data')); + await BootstrapUtils.deleteFolder(this.logger, join(nemesisWorkingDir, `seed`, networkIdentifier)); + this.logger.info('Nemgen executed!!!!'); } } diff --git a/src/service/PortService.ts b/packages/bootstrap-core/src/service/PortService.ts similarity index 95% rename from src/service/PortService.ts rename to packages/bootstrap-core/src/service/PortService.ts index 40a55e2b1..a3a4fe6a7 100644 --- a/src/service/PortService.ts +++ b/packages/bootstrap-core/src/service/PortService.ts @@ -18,7 +18,7 @@ import * as net from 'net'; export class PortService { public static async isReachable(port: number, host: string, timeout = 1000): Promise { - const promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { const socket = new net.Socket(); const onError = () => { diff --git a/packages/bootstrap-core/src/service/RemoteNodeService.ts b/packages/bootstrap-core/src/service/RemoteNodeService.ts new file mode 100644 index 000000000..d051e2a71 --- /dev/null +++ b/packages/bootstrap-core/src/service/RemoteNodeService.ts @@ -0,0 +1,113 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { lookup } from 'dns'; +import { ChainInfo, RepositoryFactory, RepositoryFactoryHttp } from 'symbol-sdk'; +import { Logger } from '../logger/Logger'; +import { ConfigPreset } from '../model'; + +export interface RepositoryInfo { + repositoryFactory: RepositoryFactory; + restGatewayUrl: string; + chainInfo: ChainInfo; +} +export class RemoteNodeService { + constructor(private readonly logger: Logger) {} + public async resolveCurrentFinalizationEpoch(presetData: ConfigPreset, offline: boolean): Promise { + if (offline) { + return presetData.lastKnownNetworkEpoch; + } + const votingNode = presetData.nodes?.find((n) => n.voting); + if (!votingNode) { + return presetData.lastKnownNetworkEpoch; + } + if (!(await this.isConnectedToInternet())) { + return presetData.lastKnownNetworkEpoch; + } + return (await this.getBestFinalizationEpoch(presetData.knownRestGateways)) || presetData.lastKnownNetworkEpoch; + } + + public async getBestFinalizationEpoch(urls: string[] | undefined): Promise { + if (!urls || !urls.length) { + return undefined; + } + const repositoryInfo = this.sortByHeight(await this.getKnownNodeRepositoryInfos(urls)).find((i) => i); + const finalizationEpoch = repositoryInfo?.chainInfo.latestFinalizedBlock.finalizationEpoch; + if (finalizationEpoch) { + this.logger.info(`The current network finalization epoch is ${finalizationEpoch}`); + } + return finalizationEpoch; + } + + public async getBestRepositoryInfo(urls: string[]): Promise { + const repositoryInfo = this.sortByHeight(await this.getKnownNodeRepositoryInfos(urls)).find((i) => i); + if (!repositoryInfo) { + throw new Error(`No up and running node could be found out of: \n - ${urls.join('\n - ')}`); + } + this.logger.info(`Connecting to node ${repositoryInfo.restGatewayUrl}`); + return repositoryInfo; + } + + private sortByHeight(repos: RepositoryInfo[]): RepositoryInfo[] { + return repos + .filter((b) => b.chainInfo) + .sort((a, b) => { + if (!a.chainInfo) { + return 1; + } + if (!b.chainInfo) { + return -1; + } + return b.chainInfo.height.compare(a.chainInfo.height); + }); + } + + public isConnectedToInternet(): Promise { + return new Promise((resolve) => { + lookup('google.com', (err) => { + if (err && err.code == 'ENOTFOUND') { + resolve(false); + } else { + resolve(true); + } + }); + }); + } + + private async getKnownNodeRepositoryInfos(urls: string[]): Promise { + this.logger.info(`Looking for the best node out of: \n - ${urls.join('\n - ')}`); + return ( + await Promise.all( + urls.map(async (restGatewayUrl): Promise => { + const repositoryFactory = new RepositoryFactoryHttp(restGatewayUrl); + try { + const chainInfo = await repositoryFactory.createChainRepository().getChainInfo().toPromise(); + return { + restGatewayUrl, + repositoryFactory, + chainInfo, + }; + } catch (e) { + const message = `There has been an error talking to node ${restGatewayUrl}. Error: ${e.message}`; + this.logger.warn(message); + return undefined; + } + }), + ) + ) + .filter((i) => i) + .map((i) => i as RepositoryInfo); + } +} diff --git a/src/service/ReportService.ts b/packages/bootstrap-core/src/service/ReportService.ts similarity index 91% rename from src/service/ReportService.ts rename to packages/bootstrap-core/src/service/ReportService.ts index 7e612c9c7..68585aff0 100644 --- a/src/service/ReportService.ts +++ b/packages/bootstrap-core/src/service/ReportService.ts @@ -17,16 +17,12 @@ import { promises as fsPromises, readFileSync } from 'fs'; import * as _ from 'lodash'; import { join } from 'path'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { LogType } from '../logger/LogType'; +import { Logger } from '../logger/Logger'; import { ConfigPreset } from '../model'; import { BootstrapUtils } from './BootstrapUtils'; import { ConfigLoader } from './ConfigLoader'; -export type ReportParams = { target: string }; - -const logger: Logger = LoggerFactory.getLogger(LogType.System); +export type ReportParams = { target: string; version?: string }; interface ReportLine { property: string; @@ -56,8 +52,8 @@ export class ReportService { target: BootstrapUtils.defaultTargetFolder, }; private readonly configLoader: ConfigLoader; - constructor(private readonly root: string, protected readonly params: ReportParams) { - this.configLoader = new ConfigLoader(); + constructor(private readonly logger: Logger, protected readonly params: ReportParams) { + this.configLoader = new ConfigLoader(logger); } private createReportFromFile(resourceContent: string, descriptions: any): ReportSection[] { @@ -100,7 +96,7 @@ export class ReportService { private async createReportsPerNode(presetData: ConfigPreset): Promise { const workingDir = process.cwd(); const target = join(workingDir, this.params.target); - const descriptions = await BootstrapUtils.loadYaml(join(this.root, 'presets', 'descriptions.yml'), false); + const descriptions = await BootstrapUtils.loadYaml(join(BootstrapUtils.DEFAULT_ROOT_FOLDER, 'presets', 'descriptions.yml'), false); const promises: Promise[] = (presetData.nodes || []).map(async (n) => { const resourcesFolder = join(BootstrapUtils.getTargetNodesFolder(target, false, n.name), 'server-config', 'resources'); const files = await fsPromises.readdir(resourcesFolder); @@ -133,7 +129,7 @@ export class ReportService { const presetData = passedPresetData ?? this.configLoader.loadExistingPresetData(this.params.target, false); const reportFolder = join(this.params.target, 'reports'); - BootstrapUtils.deleteFolder(reportFolder); + BootstrapUtils.deleteFolder(this.logger, reportFolder); const reportNodes: ReportNode[] = await this.createReportsPerNode(presetData); const missingProperties = _.flatMap(reportNodes, (n) => @@ -152,7 +148,7 @@ export class ReportService { description: '', }), ); - logger.debug('Missing yaml properties: ' + BootstrapUtils.toYaml(missingDescriptionsObject)); + this.logger.debug('Missing yaml properties: ' + BootstrapUtils.toYaml(missingDescriptionsObject)); } // const missingDescriptions = reportNodes.map(node -> node.files) @@ -167,7 +163,7 @@ export class ReportService { private async toRstReport(reportFolder: string, n: ReportNode) { const reportFile = join(reportFolder, `${n.name}-config.rst`); const reportContent = - `Symbol Bootstrap Version: ${BootstrapUtils.VERSION}\n` + + `Symbol Bootstrap Version: ${this.params.version || BootstrapUtils.VERSION}\n` + n.files .map((fileReport) => { const hasDescriptionSection = fileReport.sections.find((s) => s.lines.find((l) => l.description || l.type)); @@ -202,14 +198,14 @@ ${csvBody.trim().replace(/^/gm, ' ')}`; .join('\n'); await BootstrapUtils.writeTextFile(reportFile, reportContent); - logger.info(`Report file ${reportFile} created`); + this.logger.info(`Report file ${reportFile} created`); return reportFile; } private async toCsvReport(reportFolder: string, n: ReportNode) { const reportFile = join(reportFolder, `${n.name}-config.csv`); const reportContent = - `symbol-bootstrap-version; ${BootstrapUtils.VERSION}\n\n` + + `symbol-bootstrap-version; ${this.params.version || BootstrapUtils.VERSION}\n\n` + n.files .map((fileReport) => { const csvBody = fileReport.sections @@ -236,7 +232,7 @@ ${csvBody.trim()}`; .join('\n\n\n'); await BootstrapUtils.writeTextFile(reportFile, reportContent); - logger.info(`Report file ${reportFile} created`); + this.logger.info(`Report file ${reportFile} created`); return reportFile; } } diff --git a/packages/bootstrap-core/src/service/RewardProgramUtils.ts b/packages/bootstrap-core/src/service/RewardProgramUtils.ts new file mode 100644 index 000000000..0dabd4d24 --- /dev/null +++ b/packages/bootstrap-core/src/service/RewardProgramUtils.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { KnownError } from '../service'; + +export enum RewardProgram { + EarlyAdoption = 'EarlyAdoption', + Ecosystem = 'Ecosystem', + SuperNode = 'SuperNode', + MonitorOnly = 'MonitorOnly', +} +export class RewardProgramUtils { + public static getRewardProgram(value: string): RewardProgram { + const programs = Object.values(RewardProgram) as RewardProgram[]; + const program = programs.find((p) => p.toLowerCase() == value.toLowerCase()); + if (program) { + return program; + } + throw new KnownError(`${value} is not a valid Reward program. Please use one of ${programs.join(', ')}`); + } +} diff --git a/src/service/RunService.ts b/packages/bootstrap-core/src/service/RunService.ts similarity index 78% rename from src/service/RunService.ts rename to packages/bootstrap-core/src/service/RunService.ts index 0ef9bc58f..62c9b9274 100644 --- a/src/service/RunService.ts +++ b/packages/bootstrap-core/src/service/RunService.ts @@ -20,9 +20,7 @@ import * as _ from 'lodash'; import { join } from 'path'; import { NodeStatusEnum } from 'symbol-openapi-typescript-fetch-client'; import { RepositoryFactoryHttp } from 'symbol-sdk'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; +import { Logger } from '../logger/Logger'; import { DockerCompose, DockerComposeService } from '../model'; import { BootstrapUtils } from './BootstrapUtils'; import { ConfigLoader } from './ConfigLoader'; @@ -41,8 +39,6 @@ export type RunParams = { target: string; }; -const logger: Logger = LoggerFactory.getLogger(LogType.System); - export class RunService { public static readonly defaultParams: RunParams = { target: BootstrapUtils.defaultTargetFolder, @@ -53,8 +49,8 @@ export class RunService { private readonly configLoader: ConfigLoader; - constructor(protected readonly params: RunParams) { - this.configLoader = new ConfigLoader(); + constructor(private readonly logger: Logger, protected readonly params: RunParams) { + this.configLoader = new ConfigLoader(this.logger); } public async run(): Promise { @@ -87,29 +83,29 @@ export class RunService { public async healthCheck(pollIntervalMs = 10000): Promise { const dockerFile = join(this.params.target, `docker`, `docker-compose.yml`); if (!existsSync(dockerFile)) { - logger.info(`Docker compose ${dockerFile} does not exist. Cannot check the status of the service.`); + this.logger.info(`Docker compose ${dockerFile} does not exist. Cannot check the status of the service.`); return; } const dockerCompose: DockerCompose = BootstrapUtils.fromYaml(await BootstrapUtils.readTextFile(dockerFile)); const services = Object.values(dockerCompose.services); const timeout = this.params.timeout || RunService.defaultParams.timeout || 0; - const started = await BootstrapUtils.poll(() => this.runOneCheck(services), timeout, pollIntervalMs); + const started = await BootstrapUtils.poll(this.logger, () => this.runOneCheck(services), timeout, pollIntervalMs); if (!started) { throw new Error(`Network did NOT start!!!`); } else { - logger.info('Network is running!'); + this.logger.info('Network is running!'); } } private async runOneCheck(services: DockerComposeService[]): Promise { - const runningContainers = (await BootstrapUtils.exec('docker ps --format {{.Names}}')).stdout.split(`\n`); + const runningContainers = (await BootstrapUtils.exec(this.logger, 'docker ps --format {{.Names}}')).stdout.split(`\n`); const allServicesChecks: Promise[] = services.map(async (service) => { if (runningContainers.indexOf(service.container_name) < 0) { - logger.warn(`Container ${service.container_name} is NOT running YET.`); + this.logger.warn(`Container ${service.container_name} is NOT running YET.`); return false; } - logger.info(`Container ${service.container_name} is running`); + this.logger.info(`Container ${service.container_name} is running`); return ( await Promise.all( (service.ports || []).map(async (portBind) => { @@ -118,9 +114,11 @@ export class RunService { const internalPort = ports.length > 1 ? parseInt(ports[1]) : externalPort; const portOpen = await PortService.isReachable(externalPort, 'localhost'); if (portOpen) { - logger.info(`Container ${service.container_name} port ${externalPort} -> ${internalPort} is open`); + this.logger.info(`Container ${service.container_name} port ${externalPort} -> ${internalPort} is open`); } else { - logger.warn(`Container ${service.container_name} port ${externalPort} -> ${internalPort} is NOT open YET.`); + this.logger.warn( + `Container ${service.container_name} port ${externalPort} -> ${internalPort} is NOT open YET.`, + ); return false; } if (service.container_name.indexOf('rest-gateway') > -1) { @@ -128,21 +126,21 @@ export class RunService { const repositoryFactory = new RepositoryFactoryHttp(url); const nodeRepository = repositoryFactory.createNodeRepository(); const testUrl = `${url}/node/health`; - logger.info(`Testing ${testUrl}`); + this.logger.info(`Testing ${testUrl}`); try { const healthStatus = await nodeRepository.getNodeHealth().toPromise(); if (healthStatus.apiNode === NodeStatusEnum.Down) { - logger.warn(`Rest ${testUrl} is NOT up and running YET: Api Node is still Down!`); + this.logger.warn(`Rest ${testUrl} is NOT up and running YET: Api Node is still Down!`); return false; } if (healthStatus.db === NodeStatusEnum.Down) { - logger.warn(`Rest ${testUrl} is NOT up and running YET: DB is still Down!`); + this.logger.warn(`Rest ${testUrl} is NOT up and running YET: DB is still Down!`); return false; } - logger.info(`Rest ${testUrl} is up and running...`); + this.logger.info(`Rest ${testUrl} is up and running...`); return true; } catch (e) { - logger.warn(`Rest ${testUrl} is NOT up and running YET: ${e.message}`); + this.logger.warn(`Rest ${testUrl} is NOT up and running YET: ${e.message}`); return false; } } @@ -150,7 +148,7 @@ export class RunService { const url = 'https://localhost:' + externalPort; const testUrl = `${url}/metadata`; - logger.info(`Testing ${testUrl}`); + this.logger.info(`Testing ${testUrl}`); try { const response = await new Promise((resolve, reject) => { try { @@ -174,10 +172,10 @@ export class RunService { if (metadata.authorized || !metadata.rewardProgram || !metadata.mainPublicKey) { throw new Error(`Invalid response ${response}`); } - logger.info(`Agent ${testUrl} is up and running...`); + this.logger.info(`Agent ${testUrl} is up and running...`); return true; } catch (e) { - logger.warn(`Agent ${testUrl} is NOT up and running YET: ${e.message}`); + this.logger.warn(`Agent ${testUrl} is NOT up and running YET: ${e.message}`); return false; } } @@ -190,7 +188,7 @@ export class RunService { } public async resetData(): Promise { - logger.info('Resetting data'); + this.logger.info('Resetting data'); const target = this.params.target; const preset = this.configLoader.loadExistingPresetData(target, false); await Promise.all( @@ -198,16 +196,16 @@ export class RunService { const componentConfigFolder = BootstrapUtils.getTargetNodesFolder(target, false, node.name); const dataFolder = join(componentConfigFolder, 'data'); const logsFolder = join(componentConfigFolder, 'logs'); - BootstrapUtils.deleteFolder(dataFolder); - BootstrapUtils.deleteFolder(logsFolder); + BootstrapUtils.deleteFolder(this.logger, dataFolder); + BootstrapUtils.deleteFolder(this.logger, logsFolder); await BootstrapUtils.mkdir(dataFolder); await BootstrapUtils.mkdir(logsFolder); }), ); (preset.gateways || []).forEach((node) => { - BootstrapUtils.deleteFolder(BootstrapUtils.getTargetGatewayFolder(target, false, node.name, 'logs')); + BootstrapUtils.deleteFolder(this.logger, BootstrapUtils.getTargetGatewayFolder(target, false, node.name, 'logs')); }); - BootstrapUtils.deleteFolder(BootstrapUtils.getTargetDatabasesFolder(target, false)); + BootstrapUtils.deleteFolder(this.logger, BootstrapUtils.getTargetDatabasesFolder(target, false)); } public async stop(): Promise { @@ -221,7 +219,7 @@ export class RunService { const args = [...dockerComposeArgs, ...extraArgs]; if (!existsSync(dockerFile)) { if (ignoreIfNotFound) { - logger.info(`Docker compose ${dockerFile} does not exist, ignoring: docker-compose ${args.join(' ')}`); + this.logger.info(`Docker compose ${dockerFile} does not exist, ignoring: docker-compose ${args.join(' ')}`); return false; } else { throw new Error(`Docker compose ${dockerFile} does not exist. Cannot run: docker-compose ${args.join(' ')}`); @@ -239,7 +237,7 @@ export class RunService { const volumenPath = join(this.params.target, `docker`, v); if (!existsSync(volumenPath)) await BootstrapUtils.mkdir(volumenPath); if (v.startsWith('../databases') && BootstrapUtils.isRoot()) { - logger.info(`Chmod 777 folder ${volumenPath}`); + this.logger.info(`Chmod 777 folder ${volumenPath}`); chmodSync(volumenPath, '777'); } }), @@ -251,7 +249,7 @@ export class RunService { const dockerFile = join(this.params.target, `docker`, `docker-compose.yml`); const dockerComposeArgs = ['-f', dockerFile]; const args = [...dockerComposeArgs, ...extraArgs]; - return BootstrapUtils.spawn('docker-compose', args, false); + return BootstrapUtils.spawn('docker-compose', args, this.logger, false); } private async pullImages(dockerCompose: DockerCompose) { @@ -261,6 +259,6 @@ export class RunService { .filter((s) => s) .map((s) => s as string), ); - await Promise.all(images.map(async (image) => await BootstrapUtils.pullImage(image))); + await Promise.all(images.map(async (image) => await BootstrapUtils.pullImage(this.logger, image))); } } diff --git a/packages/bootstrap-core/src/service/VerifyService.ts b/packages/bootstrap-core/src/service/VerifyService.ts new file mode 100644 index 000000000..261c24fa0 --- /dev/null +++ b/packages/bootstrap-core/src/service/VerifyService.ts @@ -0,0 +1,197 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import * as os from 'os'; +import * as semver from 'semver'; +import { Logger } from '../logger'; +import { BootstrapUtils } from './BootstrapUtils'; +export interface VerifyReport { + platform: string; + lines: ReportLine[]; +} + +export interface ReportLine { + header: string; + message: string; + recommendation?: string; +} + +export interface ExpectedVersions { + node: string; + docker: string; + dockerCompose: string; + symbolBootstrap?: string; +} + +const defaultExpectedVersions: ExpectedVersions = { + node: '12.0.0', + docker: '18.3.0', + dockerCompose: '1.25.0', +}; + +export class VerifyService { + private readonly expectedVersions: ExpectedVersions; + public readonly semverOptions = { loose: true }; + + constructor(private readonly logger: Logger, expectedVersions: Partial = {}) { + this.expectedVersions = { ...defaultExpectedVersions, ...expectedVersions }; + } + + public async createReport(): Promise { + const lines: ReportLine[] = []; + const platform = `${os.type()} - ${os.release()} - ${os.platform()}`; + lines.push(await this.testNodeJs(this.expectedVersions.node)); + const docker = await this.testDocker(this.expectedVersions.docker); + lines.push(docker); + lines.push(await this.testDockerCompose(this.expectedVersions.dockerCompose)); + if (this.expectedVersions.symbolBootstrap) lines.push(await this.testSymbolBootstrap(this.expectedVersions.symbolBootstrap)); + if (!docker.recommendation) lines.push(await this.testDockerRun()); + if (!BootstrapUtils.isWindows()) { + lines.push(await this.testSudo()); + } + + return { lines, platform }; + } + + public logReport(report: VerifyReport, logger: Logger): void { + logger.info(`OS: ${report.platform}`); + report.lines.forEach((line) => { + if (line.recommendation) { + logger.error(`${line.header} - Error! - ${line.message} - ${line.recommendation}`); + } else { + logger.info(`${line.header} - OK! - ${line.message}`); + } + }); + const errors = report.lines.filter((r) => r.recommendation); + if (errors.length) { + throw new Error( + 'There has been an error. Check the report: \n' + + errors.map((line) => ` - ${line.header} - Error! - ${line.message} - ${line.recommendation}`).join('\n'), + ); + } + } + + public loadVersion(text: string): string | undefined { + return text + .replace(',', '') + .split(' ') + .map((word) => { + const coerce = semver.coerce(word.trim(), this.semverOptions); + return coerce?.raw; + }) + .find((a) => a) + ?.trim(); + } + + public async testNodeJs(expectedVersion: string): Promise { + const header = 'NodeVersion'; + const recommendationUrl = `https://nodejs.org/en/download/package-manager/`; + const output = process.versions.node; + return this.verifyInstalledApp(async () => output, header, expectedVersion, recommendationUrl); + } + + public async testDocker(expectedVersion: string): Promise { + const header = 'Docker Version'; + const command = 'docker --version'; + const recommendationUrl = `https://docs.docker.com/get-docker/`; + return this.verifyInstalledApp(async () => await this.loadVersionFromCommand(command), header, expectedVersion, recommendationUrl); + } + public async testDockerCompose(expectedVersion: string): Promise { + const header = 'Docker Compose Version'; + const command = 'docker-compose --version'; + const recommendationUrl = `https://docs.docker.com/compose/install/`; + return this.verifyInstalledApp(async () => await this.loadVersionFromCommand(command), header, expectedVersion, recommendationUrl); + } + + public async testSymbolBootstrap(expectedVersion: string): Promise { + const header = 'Symbol Bootstrap Version'; + const command = 'symbol-bootstrap --version'; + const recommendationUrl = `https://github.com/symbol/symbol-bootstrap/tree/main/packages/bootstrap-core`; + return this.verifyInstalledApp(async () => await this.loadVersionFromCommand(command), header, expectedVersion, recommendationUrl); + } + + public async testDockerRun(): Promise { + const header = 'Docker Run Test'; + const command = 'docker run hello-world'; + const recommendationUrl = `https://www.digitalocean.com/community/questions/how-to-fix-docker-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket`; + + try { + const output = (await BootstrapUtils.exec(this.logger, command)).stdout.trim(); + const expectedText = 'Hello from Docker!'; + if (output.indexOf(expectedText) == -1) { + return { + header, + message: `Command '${command}' could not be executed: Error: '${expectedText}' not in output text \n${output}`, + recommendation: `Please check ${recommendationUrl}`, + }; + } + return { header, message: `Command '${command}' executed!` }; + } catch (e) { + return { + header, + message: `Command '${command}' could not be executed: Error: ${e.message}`, + recommendation: `Please check ${recommendationUrl}`, + }; + } + } + + public async testSudo(): Promise { + const header = 'Sudo User Test'; + if (BootstrapUtils.isRoot()) { + return { + header, + message: `Your are running with the sudo user!`, + recommendation: `Either don't use sudo or create a non sudo user to run Bootstrap.`, + }; + } + return { header, message: `Your are not the sudo user!` }; + } + + public async loadVersionFromCommand(command: string): Promise { + return this.loadVersion((await BootstrapUtils.exec(this.logger, command)).stdout.trim()); + } + + private async verifyInstalledApp( + versionLoader: () => Promise, + header: string, + minVersion: string, + recommendationUrl: string, + ): Promise { + try { + const version = await versionLoader(); + if (!version) { + return { + header, + message: `Version could not be found! Output: ${versionLoader}`, + recommendation: `At least version ${minVersion} is required. Check ${recommendationUrl}`, + }; + } + if (semver.lt(version, minVersion, this.semverOptions)) { + return { + header, + message: version, + recommendation: `At least version ${minVersion} is required. Currently installed version is ${version}. Check ${recommendationUrl}`, + }; + } + return { header, message: version }; + } catch (e) { + return { + header, + message: `Error: ${e.message}`, + recommendation: `At least version ${minVersion} is required. Check ${recommendationUrl}`, + }; + } + } +} diff --git a/packages/bootstrap-core/src/service/VotingKeyFileProvider.ts b/packages/bootstrap-core/src/service/VotingKeyFileProvider.ts new file mode 100644 index 000000000..6a1f76c43 --- /dev/null +++ b/packages/bootstrap-core/src/service/VotingKeyFileProvider.ts @@ -0,0 +1,104 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { writeFileSync } from 'fs'; +import { join } from 'path'; +import { Account } from 'symbol-sdk'; +import { Logger } from '../logger/Logger'; +import { ConfigPreset, NodeAccount, NodePreset } from '../model'; +import { BootstrapUtils } from './BootstrapUtils'; +import { VotingKeyFile, VotingUtils } from './VotingUtils'; + +export interface VotingKeyParams { + presetData: ConfigPreset; + nodeAccount: NodeAccount; + nodePreset: NodePreset; + votingKeysFolder: string; + privateKeyTreeFileName: string; + votingKeyStartEpoch: number; + votingKeyEndEpoch: number; +} + +export interface VotingKeyFileProvider { + createVotingFile(params: VotingKeyParams): Promise; +} + +export class NativeVotingKeyFileProvider implements VotingKeyFileProvider { + constructor(private readonly logger: Logger) {} + public async createVotingFile({ + presetData, + votingKeysFolder, + privateKeyTreeFileName, + votingKeyStartEpoch, + votingKeyEndEpoch, + }: VotingKeyParams): Promise { + const votingAccount = Account.generateNewAccount(presetData.networkType); + const votingPrivateKey = votingAccount.privateKey; + const votingUtils = new VotingUtils(); + this.logger.info('Voting file is created using the native typescript voting key file generator!'); + const votingFile = await votingUtils.createVotingFile(votingPrivateKey, votingKeyStartEpoch, votingKeyEndEpoch); + writeFileSync(join(votingKeysFolder, privateKeyTreeFileName), votingFile); + return { + publicKey: votingAccount.publicKey, + startEpoch: votingKeyStartEpoch, + endEpoch: votingKeyEndEpoch, + filename: privateKeyTreeFileName, + }; + } +} + +export class CatapultVotingKeyFileProvider implements VotingKeyFileProvider { + constructor(private readonly logger: Logger, private readonly user: string) {} + public async createVotingFile({ + presetData, + votingKeysFolder, + privateKeyTreeFileName, + votingKeyStartEpoch, + votingKeyEndEpoch, + }: VotingKeyParams): Promise { + this.logger.info(`Voting file is created using docker and catapult.tools.votingkey`); + const votingAccount = Account.generateNewAccount(presetData.networkType); + const votingPrivateKey = votingAccount.privateKey; + const symbolServerImage = presetData.symbolServerImage; + const binds = [`${votingKeysFolder}:/votingKeys:rw`]; + const cmd = [ + `${presetData.catapultAppFolder}/bin/catapult.tools.votingkey`, + `--secret=${votingPrivateKey}`, + `--startEpoch=${votingKeyStartEpoch}`, + `--endEpoch=${votingKeyEndEpoch}`, + `--output=/votingKeys/${privateKeyTreeFileName}`, + ]; + const userId = await BootstrapUtils.resolveDockerUserFromParam(this.logger, this.user); + const { stdout, stderr } = await BootstrapUtils.runImageUsingExec(this.logger, { + catapultAppFolder: presetData.catapultAppFolder, + image: symbolServerImage, + userId: userId, + cmds: cmd, + binds: binds, + }); + + if (stdout.indexOf(' ') > -1) { + this.logger.info(stdout); + this.logger.error(stderr); + throw new Error('Voting key failed. Check the logs!'); + } + return { + publicKey: votingAccount.publicKey, + startEpoch: votingKeyStartEpoch, + endEpoch: votingKeyEndEpoch, + filename: privateKeyTreeFileName, + }; + } +} diff --git a/packages/bootstrap-core/src/service/VotingService.ts b/packages/bootstrap-core/src/service/VotingService.ts new file mode 100644 index 000000000..f5a4a1810 --- /dev/null +++ b/packages/bootstrap-core/src/service/VotingService.ts @@ -0,0 +1,119 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { join } from 'path'; +import { Logger } from '../logger/Logger'; +import { ConfigPreset, NodeAccount, NodePreset } from '../model'; +import { BootstrapUtils } from './BootstrapUtils'; +import { CatapultVotingKeyFileProvider, NativeVotingKeyFileProvider, VotingKeyFileProvider } from './VotingKeyFileProvider'; +import { VotingUtils } from './VotingUtils'; + +export interface VotingParams { + target: string; + user: string; + votingKeyFileProvider?: VotingKeyFileProvider; +} + +export class VotingService { + constructor(private readonly logger: Logger, protected readonly params: VotingParams) {} + + public async run( + presetData: ConfigPreset, + nodeAccount: NodeAccount, + nodePreset: NodePreset, + currentNetworkEpoch: number | undefined, + updateVotingKey: boolean | undefined, + nemesisBlock: boolean, + ): Promise { + const networkEpoch = currentNetworkEpoch || presetData.lastKnownNetworkEpoch || 1; + const update = updateVotingKey === undefined ? presetData.autoUpdateVotingKeys : updateVotingKey; + if (!nodePreset?.voting) { + this.logger.info(`Node ${nodeAccount.name} is not voting.`); + return false; + } + const target = this.params.target; + const votingKeysFolder = join(BootstrapUtils.getTargetNodesFolder(target, true, nodeAccount.name), presetData.votingKeysDirectory); + const votingKeyDesiredFutureLifetime = presetData.votingKeyDesiredFutureLifetime; + const votingKeyDesiredLifetime = presetData.votingKeyDesiredLifetime; + if (votingKeyDesiredFutureLifetime > votingKeyDesiredLifetime) { + throw new Error( + `votingKeyDesiredFutureLifetime (${votingKeyDesiredFutureLifetime}) cannot be greater than votingKeyDesiredLifetime (${votingKeyDesiredLifetime})`, + ); + } + await BootstrapUtils.mkdir(votingKeysFolder); + const votingUtils = new VotingUtils(); + await BootstrapUtils.deleteFile(join(votingKeysFolder, 'metadata.yml')); + const currentVotingFiles = votingUtils.loadVotingFiles(votingKeysFolder); + const maxVotingKeyEndEpoch = Math.max(currentVotingFiles[currentVotingFiles.length - 1]?.endEpoch || 0, networkEpoch - 1); + + //This updates the addresses.yml data about existing voting files. If a user puts a manual file into the voting folder, this will update the yml file automatically. + nodeAccount.voting = currentVotingFiles; + + if (maxVotingKeyEndEpoch > networkEpoch + votingKeyDesiredFutureLifetime) { + this.logger.info(`Node ${nodeAccount.name}'s voting files are up-to-date.`); + return false; + } + // First file is created automatically on start, second file may or may not. + if (!update && currentVotingFiles.length > 0) { + this.logger.warn(''); + this.logger.warn( + `Voting key files are close to EXPIRATION or have EXPIRED!. Run the 'symbol-bootstrap updateVotingKeys' command!`, + ); + this.logger.warn(''); + return false; + } + const votingKeyStartEpoch = maxVotingKeyEndEpoch + 1; + const votingKeyEndEpoch = maxVotingKeyEndEpoch + votingKeyDesiredLifetime; + const epochs = votingKeyEndEpoch - votingKeyStartEpoch + 1; + this.logger.info(`Creating Voting key file of ${epochs} epochs for node ${nodeAccount.name}. This could take a while!`); + const privateKeyTreeFileName = `private_key_tree${currentVotingFiles.length + 1}.dat`; + const provider = + this.params.votingKeyFileProvider || + (presetData.useExperimentalNativeVotingKeyGeneration + ? new NativeVotingKeyFileProvider(this.logger) + : new CatapultVotingKeyFileProvider(this.logger, this.params.user)); + const votingKeyFile = await provider.createVotingFile({ + presetData: presetData, + nodeAccount: nodeAccount, + nodePreset: nodePreset, + votingKeysFolder: votingKeysFolder, + privateKeyTreeFileName: privateKeyTreeFileName, + votingKeyStartEpoch: votingKeyStartEpoch, + votingKeyEndEpoch: votingKeyEndEpoch, + }); + + if (nemesisBlock) { + // For a new private network, voting keys are in the nemesisBlock. + this.logger.info(''); + this.logger.info( + `A new Voting File for the node ${nodeAccount.name} has been generated. The link transaction will be included in the nemesis block.`, + ); + this.logger.info(''); + } else { + // For a running network. + this.logger.warn(''); + this.logger.warn(`A new Voting File for the node ${nodeAccount.name} has been generated! `); + + this.logger.warn( + `Remember to send a Voting Key Link transaction from main ${nodeAccount.main.address} using the Voting Public Key: ${votingKeyFile.publicKey} with startEpoch: ${votingKeyStartEpoch} and endEpoch: ${votingKeyEndEpoch}`, + ); + this.logger.warn(`For linking, you can use 'symbol-bootstrap link' command, the symbol cli, or the symbol desktop wallet.`); + this.logger.warn(''); + } + nodeAccount.voting = votingUtils.loadVotingFiles(votingKeysFolder); + return true; + } +} diff --git a/src/service/VotingUtils.ts b/packages/bootstrap-core/src/service/VotingUtils.ts similarity index 88% rename from src/service/VotingUtils.ts rename to packages/bootstrap-core/src/service/VotingUtils.ts index 2e436fc36..d3dedf8fe 100644 --- a/src/service/VotingUtils.ts +++ b/packages/bootstrap-core/src/service/VotingUtils.ts @@ -15,12 +15,10 @@ */ import { existsSync, lstatSync, readdirSync, readFileSync } from 'fs'; import * as noble from 'noble-ed25519'; -import * as forge from 'node-forge'; import { join } from 'path'; import { Convert, Crypto } from 'symbol-sdk'; import * as nacl from 'tweetnacl'; -const ed25519 = forge.pki.ed25519; export interface KeyPair { privateKey: Uint8Array; publicKey: Uint8Array; @@ -51,26 +49,6 @@ export class VotingUtils { }, }; - public static forgeImplementation: CryptoImplementation = { - name: 'Forge', - createKeyPairFromPrivateKey: async (privateKey: Uint8Array): Promise => { - const keyPair = ed25519.generateKeyPair({ seed: privateKey }); - return { privateKey, publicKey: keyPair.publicKey }; - }, - - sign: async (keyPair: KeyPair, data: Uint8Array): Promise => { - const secretKey = new Uint8Array(64); - secretKey.set(keyPair.privateKey); - secretKey.set(keyPair.publicKey, 32); - const signature = ed25519.sign({ - // also accepts a forge ByteBuffer or Uint8Array - message: data, - privateKey: secretKey, - }); - return new Uint8Array(signature); - }, - }; - public static tweetNaClImplementation: CryptoImplementation = { name: 'TweetNaCl', createKeyPairFromPrivateKey: async (privateKey: Uint8Array): Promise => { @@ -86,7 +64,7 @@ export class VotingUtils { }, }; - public static implementations = [VotingUtils.nobleImplementation, VotingUtils.tweetNaClImplementation, VotingUtils.forgeImplementation]; + public static implementations = [VotingUtils.nobleImplementation, VotingUtils.tweetNaClImplementation]; constructor(private readonly implementation: CryptoImplementation = VotingUtils.nobleImplementation) {} public insert(result: Uint8Array, value: Uint8Array, index: number): number { diff --git a/packages/bootstrap-core/src/service/ZipUtils.ts b/packages/bootstrap-core/src/service/ZipUtils.ts new file mode 100644 index 000000000..5c78657ba --- /dev/null +++ b/packages/bootstrap-core/src/service/ZipUtils.ts @@ -0,0 +1,123 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import archiver from 'archiver'; +import { createWriteStream } from 'fs'; +import StreamZip from 'node-stream-zip'; +import { Logger } from '../logger'; +import { BootstrapUtils } from './BootstrapUtils'; + +export interface ZipItem { + from: string; + directory: boolean; + to: string; + blacklist?: string[]; +} + +export class ZipUtils { + constructor(private readonly logger: Logger) {} + public async zip(destination: string, items: ZipItem[]): Promise { + const output = createWriteStream(destination); + const archive = archiver('zip', { + zlib: { level: 9 }, // Sets the compression level. + }); + archive.pipe(output); + return new Promise(async (resolve, reject) => { + output.on('close', () => { + this.logger.info(''); + this.logger.info(`Zip file ${destination} size ${Math.floor(archive.pointer() / 1024)} KB has been created.`); + resolve(); + }); + + output.on('end', () => { + this.logger.info(''); + this.logger.info('Data has been drained'); + }); + + // good practice to catch warnings (ie stat failures and other non-blocking errors) + archive.on('warning', (err: any) => { + this.logger.info(''); + if (err.code === 'ENOENT') { + // log warning + this.logger.info(`There has been an warning creating ZIP file '${destination}' ${err.message || err}`); + } else { + // throw error + this.logger.info(`There has been an error creating ZIP file '${destination}' ${err.message || err}`); + reject(err); + } + }); + + // good practice to catch this error explicitly + archive.on('error', (err: any) => { + this.logger.info(`There has been an error creating ZIP file '${destination}' ${err.message || err}`); + reject(err); + }); + + for (const item of items) { + if (item.directory) { + archive.directory(item.from, item.to || false, (entry) => { + if (item.blacklist?.find((s) => entry.name === s)) { + return false; + } + return entry; + }); + } else { + archive.file(item.from, { name: item.to }); + } + } + archive.on('progress', (progress) => { + const message = `${progress.entries.processed} entries zipped!`; + BootstrapUtils.logSameLineMessage(message); + }); + await archive.finalize(); + }); + } + + public unzip(zipFile: string, innerFolder: string, targetFolder: string): Promise { + const zip = new StreamZip({ + file: zipFile, + storeEntries: true, + }); + this.logger.info(`Unzipping Backup Sync's '${innerFolder}' into '${targetFolder}'. This could take a while!`); + let totalFiles = 0; + let process = 0; + return new Promise((resolve, reject) => { + zip.on('entry', (entry) => { + if (!entry.isDirectory && totalFiles) { + process++; + const percentage = ((process * 100) / totalFiles).toFixed(2); + const message = `${percentage}% | ${process} files unzipped out of ${totalFiles}`; + BootstrapUtils.logSameLineMessage(message); + } + if (BootstrapUtils.stopProcess) { + zip.close(); + reject(new Error('Process cancelled!')); + } + }); + zip.on('ready', () => { + totalFiles = zip.entriesCount; + zip.extract(innerFolder, targetFolder, (err) => { + zip.close(); + if (err) { + reject(err); + } else { + this.logger.info(`Unzipped '${targetFolder}' created`); + resolve(); + } + }); + }); + }); + } +} diff --git a/packages/bootstrap-core/src/service/index.ts b/packages/bootstrap-core/src/service/index.ts new file mode 100644 index 000000000..af54c408c --- /dev/null +++ b/packages/bootstrap-core/src/service/index.ts @@ -0,0 +1,24 @@ +// created from 'create-ts-index' + +export * from './AccountResolver'; +export * from './AgentCertificateService'; +export * from './AnnounceService'; +export * from './BootstrapService'; +export * from './BootstrapUtils'; +export * from './CertificateService'; +export * from './ComposeService'; +export * from './ConfigLoader'; +export * from './ConfigService'; +export * from './CryptoUtils'; +export * from './LinkTransactionGenericFactory'; +export * from './NemgenService'; +export * from './PortService'; +export * from './RemoteNodeService'; +export * from './ReportService'; +export * from './RewardProgramUtils'; +export * from './RunService'; +export * from './VerifyService'; +export * from './VotingKeyFileProvider'; +export * from './VotingService'; +export * from './VotingUtils'; +export * from './ZipUtils'; diff --git a/test/addresses/addresses-new.yml b/packages/bootstrap-core/test/addresses/addresses-new.yml similarity index 100% rename from test/addresses/addresses-new.yml rename to packages/bootstrap-core/test/addresses/addresses-new.yml diff --git a/test/addresses/addresses-old.yml b/packages/bootstrap-core/test/addresses/addresses-old.yml similarity index 100% rename from test/addresses/addresses-old.yml rename to packages/bootstrap-core/test/addresses/addresses-old.yml diff --git a/test/agentCertificates/agent-ca.cnf b/packages/bootstrap-core/test/agentCertificates/agent-ca.cnf similarity index 100% rename from test/agentCertificates/agent-ca.cnf rename to packages/bootstrap-core/test/agentCertificates/agent-ca.cnf diff --git a/test/agentCertificates/agent-ca.csr.pem b/packages/bootstrap-core/test/agentCertificates/agent-ca.csr.pem similarity index 100% rename from test/agentCertificates/agent-ca.csr.pem rename to packages/bootstrap-core/test/agentCertificates/agent-ca.csr.pem diff --git a/test/agentCertificates/agent-ca.key.pem b/packages/bootstrap-core/test/agentCertificates/agent-ca.key.pem similarity index 100% rename from test/agentCertificates/agent-ca.key.pem rename to packages/bootstrap-core/test/agentCertificates/agent-ca.key.pem diff --git a/test/agentCertificates/agent-ca.pubkey.pem b/packages/bootstrap-core/test/agentCertificates/agent-ca.pubkey.pem similarity index 100% rename from test/agentCertificates/agent-ca.pubkey.pem rename to packages/bootstrap-core/test/agentCertificates/agent-ca.pubkey.pem diff --git a/test/agentCertificates/agent-comm.cnf b/packages/bootstrap-core/test/agentCertificates/agent-comm.cnf similarity index 100% rename from test/agentCertificates/agent-comm.cnf rename to packages/bootstrap-core/test/agentCertificates/agent-comm.cnf diff --git a/test/agentCertificates/metadata.yml b/packages/bootstrap-core/test/agentCertificates/metadata.yml similarity index 100% rename from test/agentCertificates/metadata.yml rename to packages/bootstrap-core/test/agentCertificates/metadata.yml diff --git a/test/bootstrap-replicate-netowork-keys.yml b/packages/bootstrap-core/test/bootstrap-replicate-netowork-keys.yml similarity index 100% rename from test/bootstrap-replicate-netowork-keys.yml rename to packages/bootstrap-core/test/bootstrap-replicate-netowork-keys.yml diff --git a/test/certificates/output.txt b/packages/bootstrap-core/test/certificates/output.txt similarity index 100% rename from test/certificates/output.txt rename to packages/bootstrap-core/test/certificates/output.txt diff --git a/test/custom_compose_preset.yml b/packages/bootstrap-core/test/custom_compose_preset.yml similarity index 100% rename from test/custom_compose_preset.yml rename to packages/bootstrap-core/test/custom_compose_preset.yml diff --git a/packages/bootstrap-core/test/custom_preset.yml b/packages/bootstrap-core/test/custom_preset.yml new file mode 100644 index 000000000..387b81c5e --- /dev/null +++ b/packages/bootstrap-core/test/custom_preset.yml @@ -0,0 +1,23 @@ +minFeeMultiplier: 0 +defaultDynamicFeeMultiplier: 0 +baseNamespace: 'bob' +nemesisGenerationHashSeed: 6C1B92391CCB41C96478471C2634C111D9E989DECD66130C0430B5B8D20117CD +dockerComposeDebugMode: true + +#totalChainImportance: 8998999998000000 +#nemesis: +## Disable harvest currency with repeat 0 +# mosaics: [{}, { repeat: 0 }] + +databases: + - dockerComposeDebugMode: false +nemesis: + nemesisSignerPrivateKey: B2AF9675B7AA8CCCBB3C1072256B3DF7354223FB5C490FFBDDB1C60696E25219 + mosaics: + - name: 'marley' + - name: 'reggae' + +wallets: + - profiles: + - name: test + location: ./test/profiles/wallet-profile-test.json diff --git a/test/encrypted.yml b/packages/bootstrap-core/test/encrypted.yml similarity index 100% rename from test/encrypted.yml rename to packages/bootstrap-core/test/encrypted.yml diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/addresses.yml new file mode 100644 index 000000000..57fba3756 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/addresses.yml @@ -0,0 +1,55 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: 'Peer,Api' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: VDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPAOKEA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: VDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4AMJVEA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: mycurrency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + - + id: 788043551A590BA9 + name: myharvest + accounts: + - + publicKey: ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + - + publicKey: 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + - + publicKey: 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/docker-compose.yml new file mode 100644 index 000000000..486c0e258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/docker-compose.yml @@ -0,0 +1,68 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..f2f90e832 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQmV74TIq+G/vCqakOcGWac3KUpUDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM1M1oXDTQxMDcwMTE3MjM1M1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA9MBNjdI96D1pm2GB0XnG/v2Lrp/Q +ykGNCZM/KsNw28RIwD5/u2g5KBf2N5Q8Sf/8QKwgTjyOAzpX1lrm+Hu1DA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..bf3befcc3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQA+3SH+OvEwi/abGVe753muSO2+zAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM1M1oXDTIyMDcxNjE3MjM1M1owDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAIXvJbHg26ULUQqNzBkjr3kMQR3e+yNbh9iAVPn7 +lL8im8Bu1sTiiIHndk7q7T6YXFxoCnub0qlNdouHekKp0AI= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..98366b2a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 880'000'000'000'000 +maxMosaicAtomicUnits = 900'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..d6e5b09d4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..414d55bfc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/gateways/rest-gateway/rest.json @@ -0,0 +1,91 @@ +{ + "network": { + "name": "privateTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..1f7cd40a7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..291d85f0c Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..ab42804ab Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..fdacafa16 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..48fe90929 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..71640fa7e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 4 + Voting Count: 0 + Voting Balance: 0 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: 1295FF87C50D7F1624106650C82486D405D83FC5FB5371EA21FD1D16DC1009D4 + Receipts Hash: 4C1E8525D98C133544AE34C30BB1337008796ED6896DD227F18B7595305E4A4F + State Hash: 84A1A7A032CD6D54428DAD60B3198A0AC66F5727B249D231B919554AF8DCB367 +--- Components (9) --- + + 542B63758AF74D8A55F6C072A74D1B2A046A98844BBDA637D019A59D13A70F8F + + 3EF38BBDCDF2CF03093F0526F902E3476A56536B0F4D449FCEC6F8969CD2663C + + 8E7EA388282B85A3CBEE7DD7323154B16F8BD269F53617226D420CC1EAE96076 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..02ee6dcbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,63 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +mycat = true +mycat.mycurrency = true +mycat.myharvest = true + +[namespace>mycat] + +duration = 0 + +[mosaics] + +mycat:mycurrency = true +mycat:myharvest = true + +[mosaic>mycat:mycurrency] + +divisibility = 6 +duration = 0 +supply = 880'000'000'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>mycat:mycurrency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 220'000'000'000'000 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 220'000'000'000'000 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 220'000'000'000'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 220'000'000'000'000 + +[mosaic>mycat:myharvest] + +divisibility = 3 +duration = 0 +supply = 15'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>mycat:myharvest] +VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA = 3'750'000 +VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ = 3'750'000 +VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ = 3'750'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 3'750'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/transactions/remote_node.bin b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/transactions/remote_node.bin new file mode 100644 index 000000000..5a1853570 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/transactions/remote_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/transactions/vrf_node.bin b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/transactions/vrf_node.bin new file mode 100644 index 000000000..fb3a76804 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nemesis/transactions/vrf_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..98366b2a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 880'000'000'000'000 +maxMosaicAtomicUnits = 900'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..d6e5b09d4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..f2f90e832 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQmV74TIq+G/vCqakOcGWac3KUpUDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM1M1oXDTQxMDcwMTE3MjM1M1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA9MBNjdI96D1pm2GB0XnG/v2Lrp/Q +ykGNCZM/KsNw28RIwD5/u2g5KBf2N5Q8Sf/8QKwgTjyOAzpX1lrm+Hu1DA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..bf3befcc3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQA+3SH+OvEwi/abGVe753muSO2+zAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM1M1oXDTIyMDcxNjE3MjM1M1owDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAIXvJbHg26ULUQqNzBkjr3kMQR3e+yNbh9iAVPn7 +lL8im8Bu1sTiiIHndk7q7T6YXFxoCnub0qlNdouHekKp0AI= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..98848cb2c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQA+3SH+OvEwi/abGVe753muSO2+zAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM1M1oXDTIyMDcxNjE3MjM1M1owDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAIXvJbHg26ULUQqNzBkjr3kMQR3e+yNbh9iAVPn7 +lL8im8Bu1sTiiIHndk7q7T6YXFxoCnub0qlNdouHekKp0AI= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQmV74TIq+G/vCqakOcGWac3KUpUDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM1M1oXDTQxMDcwMTE3MjM1M1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA9MBNjdI96D1pm2GB0XnG/v2Lrp/Q +ykGNCZM/KsNw28RIwD5/u2g5KBf2N5Q8Sf/8QKwgTjyOAzpX1lrm+Hu1DA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..98366b2a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 880'000'000'000'000 +maxMosaicAtomicUnits = 900'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..d6e5b09d4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/preset.yml new file mode 100644 index 000000000..e24c841a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/preset.yml @@ -0,0 +1,328 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 880000000000000 +maxMosaicAtomicUnits: 900000000000000 +totalChainImportance: 15000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: mycat +networkDescription: Ny Company Netowkr +beneficiaryAddress: '' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: mycurrency + divisibility: 6 + duration: 0 + supply: 880000000000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 220000000000000 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 220000000000000 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 220000000000000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 220000000000000 + - + name: myharvest + divisibility: 3 + duration: 0 + supply: 15000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + currencyDistributions: + - + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + amount: 3750000 + - + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + amount: 3750000 + - + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ + amount: 3750000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 3750000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: test/unit-test-profiles/custom-network.yml +assembly: dual +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + - + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +explorers: [] +wallets: [] +faucets: [] +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 788043551A590BA9 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/reports/node-config.csv new file mode 100644 index 000000000..78173e995 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/reports/node-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 880'000'000'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 900'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/reports/node-config.rst new file mode 100644 index 000000000..6370d8206 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-dual-target/reports/node-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 880'000'000'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 900'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/addresses.yml new file mode 100644 index 000000000..6d95f7030 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/addresses.yml @@ -0,0 +1,97 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: peer-node-0 + friendlyName: peer-node-0 + roles: 'Peer,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: VDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPAOKEA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: VDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4AMJVEA + voting: + - + publicKey: 675D847C23F181E8EA64A1DA926B99406C12155F630240622D26EBB9290A0B02 + startEpoch: 1 + endEpoch: 360 + filename: private_key_tree1.dat + - + name: peer-node-1 + friendlyName: peer-node-1 + roles: 'Peer,Voting' + main: + publicKey: F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8 + address: VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY + transport: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 404F4D08238867A2CBE61CB4D3AB5E6E8F69B6DBE80442025021F518B099BF8A + address: VAPMWPTZRETEQRNQ37UE72IAI4RHWXDH3DXJNBY + remote: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 3A6DF713A680D77EAF40BDD5DB1A701E52303BDC29314B9A0C00F17CF31B9AE4 + address: VCA7OHAAJTLWCIDAGOG4X5BTKBJRWMFLHGPFNAI + vrf: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: CF58C1A57E19B238B0D8DC1E74363C5BF399CF87251F4FF6A778B33946ADA34D + address: VC7B6MRPIOWQASLSHCXBKQ4ND4FH4TRGGYZQWYI + voting: + - + publicKey: 8AC4BCEE773D4D0511AC0D26BBB99A6D22A69E8BC20398AA03EA16640B5042EA + startEpoch: 1 + endEpoch: 360 + filename: private_key_tree1.dat + - + name: api-node-0 + friendlyName: api-node-0 + roles: Api + main: + publicKey: 65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2 + address: VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000BBBBB2 + publicKey: 051660FA2830C44E9DD2FD02A9E64A2878E013DEE5252B401D8B282D1C3A315D + address: VCNDEIWMTLC6R3KWMQOGHL7JMWGV5SYUTFO22MA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: mycurrency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + - + id: 788043551A590BA9 + name: myharvest + accounts: + - + publicKey: ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + - + publicKey: 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + - + publicKey: 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/docker-compose.yml new file mode 100644 index 000000000..9e7ee6b60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/docker-compose.yml @@ -0,0 +1,113 @@ +version: '2.4' +services: + db-0: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db-0 + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db-0 --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + ports: + - '27017:27017' + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db-0:/dbdata:rw' + peer-node-0: + user: '1000:1000' + container_name: peer-node-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-0 NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/peer-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - peer-node-0 + hostname: peer-node-0 + peer-node-1: + user: '1000:1000' + container_name: peer-node-1 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-1 NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7901:7900' + volumes: + - '../nodes/peer-node-1:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - peer-node-1 + hostname: peer-node-1 + api-node-0: + user: '1000:1000' + container_name: api-node-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-0 NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + volumes: + - '../nodes/api-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db-0 + - api-node-broker-0 + networks: + default: + aliases: + - api-node-0 + hostname: api-node-0 + api-node-broker-0: + user: '1000:1000' + container_name: api-node-broker-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-0 NORMAL + ports: + - '8002:7902' + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/api-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db-0 + rest-gateway-0: + container_name: rest-gateway-0 + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway-0:/symbol-workdir:rw' + depends_on: + - db-0 + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..a56bd6bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH0MIGnAhRq+fTr+FLlSaw+8/x5HuLDCwEhOjAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjM1OFoXDTQxMDcwMTE3MjM1 +OFowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA4I/YFf1h9+ce +8Hg/zX+6dSM4F3fYppuELnrTul0dzjfQX5Q5lDZIsoxo3Jk0w9hXxNyeMG8MRJoe +o9j3fLXMAw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..96c35cb26 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHrMIGeAhN6e+ejbtsCBHd2zoSR14dMtHfgMAUGAytlcDAdMRswGQYDVQQDDBJh +cGktbm9kZS0wLWFjY291bnQwHhcNMjEwNzA2MTcyMzU4WhcNMjIwNzE2MTcyMzU4 +WjAVMRMwEQYDVQQDDAphcGktbm9kZS0wMCowBQYDK2VwAyEABRZg+igwxE6d0v0C +qeZKKHjgE97lJStAHYsoLRw6MV0wBQYDK2VwA0EA3wJgugideBfcynnkYAzVKU9D +TRTCqXC0JtlxNK75Q/OcwWlG7uetA4fkpK1EE3cobLPIi+tKQbyZji5Jj4sWBQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..f99b069e0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7uy +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties new file mode 100644 index 000000000..98366b2a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 880'000'000'000'000 +maxMosaicAtomicUnits = 900'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties new file mode 100644 index 000000000..8d73e1fbb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/rest.json b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/rest.json new file mode 100644 index 000000000..89aa42eac --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/gateways/rest-gateway-0/rest.json @@ -0,0 +1,91 @@ +{ + "network": { + "name": "privateTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer" + ], + "db": { + "url": "mongodb://db-0:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "api-node-0", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "api-node-broker-0", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..1d01328fc Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..ffa2fbdec Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..ab42804ab Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..85a1db9a2 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..fe70c0c33 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..5c42d5ece --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 6 + Voting Count: 2 + Voting Balance: 5000000 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: F4A08DC27B97A6613B09A8A3511290BC5D18B75DC7AF316C60CB87BE930D9376 + Receipts Hash: 4C1E8525D98C133544AE34C30BB1337008796ED6896DD227F18B7595305E4A4F + State Hash: 10DF1BB048EBA89DBB30699E325DDC63D5E48B54FCF845903D50FB8A6D3AAD97 +--- Components (9) --- + + C6DADD055F7BFCB022D791CBD27D7F33B9F8076549FC32E9CAE10D56D702398D + + 3EF38BBDCDF2CF03093F0526F902E3476A56536B0F4D449FCEC6F8969CD2663C + + 8E7EA388282B85A3CBEE7DD7323154B16F8BD269F53617226D420CC1EAE96076 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..dc50b215b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,67 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +mycat = true +mycat.mycurrency = true +mycat.myharvest = true + +[namespace>mycat] + +duration = 0 + +[mosaics] + +mycat:mycurrency = true +mycat:myharvest = true + +[mosaic>mycat:mycurrency] + +divisibility = 6 +duration = 0 +supply = 880'000'000'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>mycat:mycurrency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 146'666'666'666'670 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 146'666'666'666'666 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 146'666'666'666'666 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 146'666'666'666'666 +VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY = 146'666'666'666'666 +VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI = 146'666'666'666'666 + +[mosaic>mycat:myharvest] + +divisibility = 3 +duration = 0 +supply = 15'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>mycat:myharvest] +VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA = 2'500'000 +VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ = 2'500'000 +VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ = 2'500'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 2'500'000 +VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY = 2'500'000 +VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI = 2'500'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/remote_peer-node-0.bin b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/remote_peer-node-0.bin new file mode 100644 index 000000000..5a1853570 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/remote_peer-node-0.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/remote_peer-node-1.bin b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/remote_peer-node-1.bin new file mode 100644 index 000000000..aa1be116a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/remote_peer-node-1.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/voting_peer-node-0.bin b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/voting_peer-node-0.bin new file mode 100644 index 000000000..8e9643dc5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/voting_peer-node-0.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/voting_peer-node-1.bin b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/voting_peer-node-1.bin new file mode 100644 index 000000000..8a89d030b Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/voting_peer-node-1.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/vrf_peer-node-0.bin b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/vrf_peer-node-0.bin new file mode 100644 index 000000000..fb3a76804 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/vrf_peer-node-0.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/vrf_peer-node-1.bin b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/vrf_peer-node-1.bin new file mode 100644 index 000000000..c4a172753 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nemesis/transactions/vrf_peer-node-1.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties new file mode 100644 index 000000000..7f0e9b10f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db-0:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties new file mode 100644 index 000000000..98366b2a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 880'000'000'000'000 +maxMosaicAtomicUnits = 900'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties new file mode 100644 index 000000000..8d73e1fbb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..bf507f5d3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json @@ -0,0 +1,27 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/ca.cert.pem new file mode 100644 index 000000000..a56bd6bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH0MIGnAhRq+fTr+FLlSaw+8/x5HuLDCwEhOjAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjM1OFoXDTQxMDcwMTE3MjM1 +OFowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA4I/YFf1h9+ce +8Hg/zX+6dSM4F3fYppuELnrTul0dzjfQX5Q5lDZIsoxo3Jk0w9hXxNyeMG8MRJoe +o9j3fLXMAw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/ca.cnf new file mode 100644 index 000000000..1c97ff643 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = api-node-0-account diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem new file mode 100644 index 000000000..0cd8270a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAZceH1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9I= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/metadata.yml new file mode 100644 index 000000000..81846081b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 051660FA2830C44E9DD2FD02A9E64A2878E013DEE5252B401D8B282D1C3A315D +mainPublicKey: 65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.cnf new file mode 100644 index 000000000..04488fc2e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = api-node-0 + diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.crt.pem new file mode 100644 index 000000000..96c35cb26 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHrMIGeAhN6e+ejbtsCBHd2zoSR14dMtHfgMAUGAytlcDAdMRswGQYDVQQDDBJh +cGktbm9kZS0wLWFjY291bnQwHhcNMjEwNzA2MTcyMzU4WhcNMjIwNzE2MTcyMzU4 +WjAVMRMwEQYDVQQDDAphcGktbm9kZS0wMCowBQYDK2VwAyEABRZg+igwxE6d0v0C +qeZKKHjgE97lJStAHYsoLRw6MV0wBQYDK2VwA0EA3wJgugideBfcynnkYAzVKU9D +TRTCqXC0JtlxNK75Q/OcwWlG7uetA4fkpK1EE3cobLPIi+tKQbyZji5Jj4sWBQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.csr.pem new file mode 100644 index 000000000..695c438fa --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGUMEgCAQAwFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPoo +MMROndL9AqnmSih44BPe5SUrQB2LKC0cOjFdoAAwBQYDK2VwA0EAnBJxE2GzcR1F +ZiV+P4NchhSxCZwKYs1BKGayBvP+M73+SD7HMjVvLl7PJ0dueARJlaJ4EmbDrYha +yxHPltGUCQ== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.full.crt.pem new file mode 100644 index 000000000..60171019b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.full.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIHrMIGeAhN6e+ejbtsCBHd2zoSR14dMtHfgMAUGAytlcDAdMRswGQYDVQQDDBJh +cGktbm9kZS0wLWFjY291bnQwHhcNMjEwNzA2MTcyMzU4WhcNMjIwNzE2MTcyMzU4 +WjAVMRMwEQYDVQQDDAphcGktbm9kZS0wMCowBQYDK2VwAyEABRZg+igwxE6d0v0C +qeZKKHjgE97lJStAHYsoLRw6MV0wBQYDK2VwA0EA3wJgugideBfcynnkYAzVKU9D +TRTCqXC0JtlxNK75Q/OcwWlG7uetA4fkpK1EE3cobLPIi+tKQbyZji5Jj4sWBQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH0MIGnAhRq+fTr+FLlSaw+8/x5HuLDCwEhOjAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjM1OFoXDTQxMDcwMTE3MjM1 +OFowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA4I/YFf1h9+ce +8Hg/zX+6dSM4F3fYppuELnrTul0dzjfQX5Q5lDZIsoxo3Jk0w9hXxNyeMG8MRJoe +o9j3fLXMAw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.key.pem new file mode 100644 index 000000000..f99b069e0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7uy +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties new file mode 100644 index 000000000..7f0e9b10f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db-0:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties new file mode 100644 index 000000000..98366b2a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 880'000'000'000'000 +maxMosaicAtomicUnits = 900'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties new file mode 100644 index 000000000..8d73e1fbb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..bf507f5d3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json @@ -0,0 +1,27 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/ca.cert.pem new file mode 100644 index 000000000..4de888baa --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQfyuhCPSboxnSFNoC3F05ek1ek+TAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIzNTlaFw00MTA3MDExNzIz +NTlaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0wLWFjY291bnQwKjAFBgMrZXADIQB+ +0cFNzVZE323rJZByp38wjbJLAR2aytrq1yZe/S0/RzAFBgMrZXADQQCjXHfqv89o +wmiiJKpTsOD4ixQ504JBXThudS6FV5Rq8kfDdfA/hSoaTCQjmThApzKHqnEdLLHr +RKdXZRATUbcH +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/ca.cnf new file mode 100644 index 000000000..82efc4d8c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-0-account diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.cnf new file mode 100644 index 000000000..831a2d17f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-0 + diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.crt.pem new file mode 100644 index 000000000..00db35db7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhNaPoOJJUGxj4ieyr0G8593l1bXMAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjM1OVoXDTIyMDcxNjE3MjM1 +OVowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn8k5EsqTO +oz8FWYWMLr8mAvilUMW92wtxAAxJmDAFBgMrZXADQQBwl0LMJOXLa53l3jmOCXr8 +fCtog0fu+Y25CV+mdVz5WeIL+kaVaM0sdcD42jtGlUbr/NduaP5wS2KrpgE5IdYC +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.csr.pem new file mode 100644 index 000000000..e5d6fef03 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGVMEkCAQAwFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn +8k5EsqTOoz8FWYWMLr8mAvilUMW92wtxAAxJmKAAMAUGAytlcANBAM/u7hnlO8Fc +fvqI6Cp8WcabjiTW6njd4v+ikUsrOgXnoSIAsl0FUp98QiNHkC9lHZFClW2vm0LX +2xKxaRlK5w4= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem new file mode 100644 index 000000000..2305651b2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhNaPoOJJUGxj4ieyr0G8593l1bXMAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjM1OVoXDTIyMDcxNjE3MjM1 +OVowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn8k5EsqTO +oz8FWYWMLr8mAvilUMW92wtxAAxJmDAFBgMrZXADQQBwl0LMJOXLa53l3jmOCXr8 +fCtog0fu+Y25CV+mdVz5WeIL+kaVaM0sdcD42jtGlUbr/NduaP5wS2KrpgE5IdYC +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQfyuhCPSboxnSFNoC3F05ek1ek+TAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIzNTlaFw00MTA3MDExNzIz +NTlaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0wLWFjY291bnQwKjAFBgMrZXADIQB+ +0cFNzVZE323rJZByp38wjbJLAR2aytrq1yZe/S0/RzAFBgMrZXADQQCjXHfqv89o +wmiiJKpTsOD4ixQ504JBXThudS6FV5Rq8kfDdfA/hSoaTCQjmThApzKHqnEdLLHr +RKdXZRATUbcH +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..bc1afb502 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties new file mode 100644 index 000000000..98366b2a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 880'000'000'000'000 +maxMosaicAtomicUnits = 900'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties new file mode 100644 index 000000000..6ba442ba3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = peer-node-0 +friendlyName = peer-node-0 +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json new file mode 100644 index 000000000..9719af8d9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2", + "endpoint": { + "host": "api-node-0", + "port": 7900 + }, + "metadata": { + "name": "api-node-0", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..bf1ef2889 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..bbb5f38a2 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/ca.cert.pem new file mode 100644 index 000000000..1fe8716a1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH2MIGpAhRyEbVBc5GKWaYcjO+dWLXggtRFjjAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIzNThaFw00MTA3MDExNzIz +NThaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0xLWFjY291bnQwKjAFBgMrZXADIQD4 +4NlAAllAcZQdq4GsRVQ5CT1K4LDcxF7jazCmHx0suDAFBgMrZXADQQArH0S+mq6k +ySz+jWAeZtS8f+ouf3/rtI3hVsViOhnL3xKa7UxBurJgL/uWwM91loAGh6P2+Dfz ++n8cLDYO/8QH +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/ca.cnf new file mode 100644 index 000000000..d771d6d2f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-1-account diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem new file mode 100644 index 000000000..ed75563ae --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEA+ODZQAJZQHGUHauBrEVUOQk9SuCw3MRe42swph8dLLg= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/metadata.yml new file mode 100644 index 000000000..83cf1581d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 404F4D08238867A2CBE61CB4D3AB5E6E8F69B6DBE80442025021F518B099BF8A +mainPublicKey: F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.cnf new file mode 100644 index 000000000..cfd4a8a75 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-1 + diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.crt.pem new file mode 100644 index 000000000..62e02fe42 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.crt.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIHuMIGhAhQAqdHnWWAy/gkDEwAcD18w4ga45DAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIzNThaFw0yMjA3MTYxNzIz +NThaMBYxFDASBgNVBAMMC3BlZXItbm9kZS0xMCowBQYDK2VwAyEAQE9NCCOIZ6LL +5hy006tebo9pttvoBEICUCH1GLCZv4owBQYDK2VwA0EACwOUEjczbQWF/SNazghX +DreTYUQGhbVIOuZho3gjncW9RfmYzyBPf1y2hC4XqbBec/tpfcKSJ8xIjOzgia1P +AQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.csr.pem new file mode 100644 index 000000000..242155349 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGVMEkCAQAwFjEUMBIGA1UEAwwLcGVlci1ub2RlLTEwKjAFBgMrZXADIQBAT00I +I4hnosvmHLTTq15uj2m22+gEQgJQIfUYsJm/iqAAMAUGAytlcANBAGnB/L4O415m +MlD4wzlzH8g+mtHT/16Ca5USb4VK5yVOpe6qvOF0npB3X4/vRLeSldTIiRHqgsTS +vmKepVDfpwM= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem new file mode 100644 index 000000000..07385fb13 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIHuMIGhAhQAqdHnWWAy/gkDEwAcD18w4ga45DAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIzNThaFw0yMjA3MTYxNzIz +NThaMBYxFDASBgNVBAMMC3BlZXItbm9kZS0xMCowBQYDK2VwAyEAQE9NCCOIZ6LL +5hy006tebo9pttvoBEICUCH1GLCZv4owBQYDK2VwA0EACwOUEjczbQWF/SNazghX +DreTYUQGhbVIOuZho3gjncW9RfmYzyBPf1y2hC4XqbBec/tpfcKSJ8xIjOzgia1P +AQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH2MIGpAhRyEbVBc5GKWaYcjO+dWLXggtRFjjAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIzNThaFw00MTA3MDExNzIz +NThaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0xLWFjY291bnQwKjAFBgMrZXADIQD4 +4NlAAllAcZQdq4GsRVQ5CT1K4LDcxF7jazCmHx0suDAFBgMrZXADQQArH0S+mq6k +ySz+jWAeZtS8f+ouf3/rtI3hVsViOhnL3xKa7UxBurJgL/uWwM91loAGh6P2+Dfz ++n8cLDYO/8QH +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.key.pem new file mode 100644 index 000000000..f2722b855 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..bc1afb502 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..f88dc0bff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 1000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 1000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties new file mode 100644 index 000000000..98366b2a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 880'000'000'000'000 +maxMosaicAtomicUnits = 900'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties new file mode 100644 index 000000000..db6cc0e4c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = peer-node-1 +friendlyName = peer-node-1 +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json new file mode 100644 index 000000000..9719af8d9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2", + "endpoint": { + "host": "api-node-0", + "port": 7900 + }, + "metadata": { + "name": "api-node-0", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..7f8526360 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..663c0ed50 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/preset.yml new file mode 100644 index 000000000..71670d3c3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/preset.yml @@ -0,0 +1,374 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 880000000000000 +maxMosaicAtomicUnits: 900000000000000 +totalChainImportance: 15000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: mycat +networkDescription: Ny Company Netowkr +beneficiaryAddress: '' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: mycurrency + divisibility: 6 + duration: 0 + supply: 880000000000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 146666666666670 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 146666666666666 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 146666666666666 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 146666666666666 + - + address: VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY + amount: 146666666666666 + - + address: VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI + amount: 146666666666666 + - + name: myharvest + divisibility: 3 + duration: 0 + supply: 15000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + currencyDistributions: + - + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + amount: 2500000 + - + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + amount: 2500000 + - + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ + amount: 2500000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 2500000 + - + address: VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY + amount: 2500000 + - + address: VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI + amount: 2500000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +explorerUrl: 'http://localhost:90' +faucetUrl: 'http://localhost:100' +databases: + - + name: db-0 + openPort: '27017' +nodes: + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + voting: true + api: false + name: peer-node-0 + friendlyName: peer-node-0 + host: peer-node-0 + openPort: '7900' + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + voting: true + api: false + name: peer-node-1 + friendlyName: peer-node-1 + host: peer-node-1 + openPort: '7901' + - + syncsource: false + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: false + api: true + friendlyName: api-node-0 + name: api-node-0 + host: api-node-0 + brokerName: api-node-broker-0 + brokerOpenPort: '8002' + databaseHost: db-0 + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + apiNodeName: api-node-0 + apiNodeHost: api-node-0 + apiNodeBrokerHost: api-node-broker-0 + name: rest-gateway-0 + description: '' + databaseHost: db-0 + openPort: '3000' + ipv4_address: 172.20.0.25 +wallets: [] +explorers: [] +faucets: [] +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: test/unit-test-profiles/custom-network.yml +assembly: multinode +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + - + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 788043551A590BA9 diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/api-node-0-config.csv b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/api-node-0-config.csv new file mode 100644 index 000000000..270ed961d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/api-node-0-config.csv @@ -0,0 +1,434 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db-0:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; false +extension.syncsource; false +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 880'000'000'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 900'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; api-node-0; string; Node host (leave empty to auto-detect IP). +friendlyName; api-node-0; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/api-node-0-config.rst b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/api-node-0-config.rst new file mode 100644 index 000000000..282991dd5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/api-node-0-config.rst @@ -0,0 +1,453 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db-0:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; false + extension.syncsource; false + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 880'000'000'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 900'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; api-node-0; string; Node host (leave empty to auto-detect IP). + friendlyName; api-node-0; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-0-config.csv b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-0-config.csv new file mode 100644 index 000000000..313ba741c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-0-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 880'000'000'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 900'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; peer-node-0; string; Node host (leave empty to auto-detect IP). +friendlyName; peer-node-0; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-0-config.rst b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-0-config.rst new file mode 100644 index 000000000..b7c2c0d5d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-0-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 880'000'000'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 900'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; peer-node-0; string; Node host (leave empty to auto-detect IP). + friendlyName; peer-node-0; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-1-config.csv b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-1-config.csv new file mode 100644 index 000000000..f602dcb9f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-1-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 880'000'000'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 900'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; peer-node-1; string; Node host (leave empty to auto-detect IP). +friendlyName; peer-node-1; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-1-config.rst b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-1-config.rst new file mode 100644 index 000000000..250c45486 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/custom-network-multinode-target/reports/peer-node-1-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 880'000'000'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 900'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; peer-node-1; string; Node host (leave empty to auto-detect IP). + friendlyName; peer-node-1; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/addresses.yml new file mode 100644 index 000000000..78601393f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/addresses.yml @@ -0,0 +1,47 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: Api + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: currency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + - + id: 788043551A590BA9 + name: harvest + accounts: + - + publicKey: ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + - + publicKey: 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + - + publicKey: 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/docker-compose.yml new file mode 100644 index 000000000..486c0e258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/docker-compose.yml @@ -0,0 +1,68 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..280211678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ2YTjwwLrFGN76E4cMnGk3zOYgfDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjIxM1oXDTQxMDcwMTE3MjIxM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EANWlEoAswrXgbXEnZ9a7sQ5hfnZOX +9Pq9r/1ZEZ4eFC1CUq0sCTKbfiTIXIze+FFft1IgNTph6o2y+XcY5t3PDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..b50e717f6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMKFHUMRf7n9XM70Z8VVUMJoEwDMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjEzWhcNMjIwNzE2MTcyMjEzWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAr8ZDVQcimTvjV3lmb4K7KoRTIyzo5GtmKsoGiIux +NBQMjNkYQFdlbz6sltxyVxEdJF+weg6hiy3rktKpX6cBCA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..f4be33a50 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..414d55bfc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/gateways/rest-gateway/rest.json @@ -0,0 +1,91 @@ +{ + "network": { + "name": "privateTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..814bfc979 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..882558361 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..a29521a64 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..f0fd78c4e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..cc9961f4c Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..653f3fb91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 4 + Voting Count: 0 + Voting Balance: 0 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: 49900169411B8450DA7DFF04065B2267B277ED3793C6904448445B8E1731EEAA + Receipts Hash: 979998750539314F9B5F9BC883886741A36F596ACA111A820F7A3CF02A5BF2AB + State Hash: 731631315679FFC170F592D79E46C24394964FB66CD31C39D367A22EF2BBBBBC +--- Components (9) --- + + 999EDBCFF3AEFAD8FCD1C8FF62BDCC6C81A9C5D9F74565846E3E149585CDA3C4 + + 5862D7D6CD9EA5D5F946E0DAB4CFCDBA862E779BA4068973DCFF91AEF8AA89DA + + F2CAAF23AFE0E5FD8F1CFC2F5855A1E4C1C492BB8462FF92105E7B90008814FB + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..da9b43d6e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,63 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +cat = true +cat.currency = true +cat.harvest = true + +[namespace>cat] + +duration = 0 + +[mosaics] + +cat:currency = true +cat:harvest = true + +[mosaic>cat:currency] + +divisibility = 6 +duration = 0 +supply = 8'998'999'998'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>cat:currency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 2'249'749'999'500'000 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 2'249'749'999'500'000 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 2'249'749'999'500'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 2'249'749'999'500'000 + +[mosaic>cat:harvest] + +divisibility = 3 +duration = 0 +supply = 15'000'000 +isTransferable = true +isSupplyMutable = true +isRestrictable = false + +[distribution>cat:harvest] +VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA = 3'750'000 +VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ = 3'750'000 +VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ = 3'750'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 3'750'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..f4be33a50 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..280211678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ2YTjwwLrFGN76E4cMnGk3zOYgfDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjIxM1oXDTQxMDcwMTE3MjIxM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EANWlEoAswrXgbXEnZ9a7sQ5hfnZOX +9Pq9r/1ZEZ4eFC1CUq0sCTKbfiTIXIze+FFft1IgNTph6o2y+XcY5t3PDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..b50e717f6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMKFHUMRf7n9XM70Z8VVUMJoEwDMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjEzWhcNMjIwNzE2MTcyMjEzWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAr8ZDVQcimTvjV3lmb4K7KoRTIyzo5GtmKsoGiIux +NBQMjNkYQFdlbz6sltxyVxEdJF+weg6hiy3rktKpX6cBCA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..0ab9f795e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMKFHUMRf7n9XM70Z8VVUMJoEwDMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjEzWhcNMjIwNzE2MTcyMjEzWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAr8ZDVQcimTvjV3lmb4K7KoRTIyzo5GtmKsoGiIux +NBQMjNkYQFdlbz6sltxyVxEdJF+weg6hiy3rktKpX6cBCA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ2YTjwwLrFGN76E4cMnGk3zOYgfDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjIxM1oXDTQxMDcwMTE3MjIxM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EANWlEoAswrXgbXEnZ9a7sQ5hfnZOX +9Pq9r/1ZEZ4eFC1CUq0sCTKbfiTIXIze+FFft1IgNTph6o2y+XcY5t3PDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..f4be33a50 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/preset.yml new file mode 100644 index 000000000..40ed1509d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/preset.yml @@ -0,0 +1,328 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +totalChainImportance: 15000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: cat +networkDescription: Symbol Local Bootstrap +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: currency + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 2249749999500000 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 2249749999500000 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 2249749999500000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 2249749999500000 + - + name: harvest + divisibility: 3 + duration: 0 + supply: 15000000 + isTransferable: true + isSupplyMutable: true + isRestrictable: false + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + currencyDistributions: + - + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + amount: 3750000 + - + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + amount: 3750000 + - + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ + amount: 3750000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 3750000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: false + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: false + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: dualCurrency +assembly: api +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + - + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +explorers: [] +wallets: [] +faucets: [] +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 788043551A590BA9 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/reports/node-config.csv new file mode 100644 index 000000000..0e670ee8d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/reports/node-config.csv @@ -0,0 +1,434 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; false +extension.syncsource; false +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/reports/node-config.rst new file mode 100644 index 000000000..681b9370e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-api-target/reports/node-config.rst @@ -0,0 +1,453 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; false + extension.syncsource; false + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/addresses.yml new file mode 100644 index 000000000..49c4e47c5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/addresses.yml @@ -0,0 +1,55 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: 'Peer,Api' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: VDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPAOKEA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: VDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4AMJVEA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: currency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + - + id: 788043551A590BA9 + name: harvest + accounts: + - + publicKey: ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + - + publicKey: 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + - + publicKey: 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/docker-compose.yml new file mode 100644 index 000000000..01324356f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/docker-compose.yml @@ -0,0 +1,117 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - node + hostname: node + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 + wallet: + container_name: wallet + image: 'symbolplatform/symbol-desktop-wallet:1.0.1' + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '80:80' + restart: 'on-failure:2' + volumes: + - '../wallets/wallet:/usr/share/nginx/html/config:ro' + explorer: + container_name: explorer + image: 'symbolplatform/symbol-explorer:1.1.0-alpha' + entrypoint: ash -c "/bin/ash /symbol-commands/run.sh explorer" + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '90:4000' + restart: 'on-failure:2' + volumes: + - '../explorers/explorer:/symbol-workdir:ro' + - './explorer:/symbol-commands:ro' + faucet: + container_name: faucet + image: 'symbolplatform/symbol-faucet:1.0.1-alpha' + stop_signal: SIGINT + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + NATIVE_CURRENCY_NAME: cat.currency + FAUCET_PRIVATE_KEY: '' + NATIVE_CURRENCY_ID: 5F54633454C3685B + restart: 'on-failure:2' + ports: + - '100:4000' + depends_on: + - rest-gateway +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/explorers/explorer/default.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/explorers/explorer/default.json new file mode 100644 index 000000000..5e74840d3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/explorers/explorer/default.json @@ -0,0 +1,52 @@ +{ + "peersApi": { + "defaultNode": "http://node:3000", + "nodes": [ + "http://node:3000" + ] + }, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "cat.currency", + "mosaicId": "5F54633454C3685B", + "divisibility": "6", + "namespaceId": "85BBEA6CC462B244", + "networkIdentifier": 168 + }, + "footer": { + "link": [ + { + "href": "https://nemflash.io/", + "text": "NEM News", + "icon": "IconNewspaper" + }, + { + "href": "https://forum.nem.io/", + "text": "Forum", + "icon": "IconForum" + }, + { + "href": "https://t.me/nemred", + "text": "Telegram", + "icon": "IconTelegram" + }, + { + "href": "https://www.reddit.com/r/nem/", + "text": "Reddit", + "icon": "IconReddit" + }, + { + "href": "https://github.com/nemtech", + "text": "Github", + "icon": "IconGithub" + }, + { + "href": "http://localhost:100/", + "text": "Faucet", + "icon": "IconHomeCurrencyUsd" + } + ] + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..537a75592 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhR8uIuuJYkMsNC27by9qC08A8LQBDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjIxOFoXDTQxMDcwMTE3MjIxOFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EApyw5E9wIP+3Pgq8k4gDgWYkJHK1Y +gBhb/9ZK5o1OUyQW5p7VP+4GzIEt28FknS6wzjo2pc8AHPdPtbNoM2c8Dw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..53dfa3258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMz4O6pWB6FCBkrFnBacOIpnzVbMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjE4WhcNMjIwNzE2MTcyMjE4WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EARyl5lm4aGHdHtYQy3Ofbe2OaT+p1GrVao0UL8TQO +CzkVQUBO5r3iSKFXMbsT31SEsWlM0a98bITrMLu24IQlCQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..5326659ec --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..414d55bfc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/gateways/rest-gateway/rest.json @@ -0,0 +1,91 @@ +{ + "network": { + "name": "privateTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..dcd4a8d16 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..73927f972 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..a29521a64 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..a1dce5e5a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..ab14bd43a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..51e69286c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 4 + Voting Count: 0 + Voting Balance: 0 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: 3EDA68E393C380830EFFEE7C6DCA51B2BDD464F67731E8DE518FF823DD338823 + Receipts Hash: 979998750539314F9B5F9BC883886741A36F596ACA111A820F7A3CF02A5BF2AB + State Hash: 0E0207E90D120737D68455D8D62938A7849A3ADF060A98C75CE5A2E712167D2D +--- Components (9) --- + + 7FB48C0E2B03BD0C47F730B12B1CB4597238AC5EAF44EBA7C19054974349EEB4 + + 5862D7D6CD9EA5D5F946E0DAB4CFCDBA862E779BA4068973DCFF91AEF8AA89DA + + F2CAAF23AFE0E5FD8F1CFC2F5855A1E4C1C492BB8462FF92105E7B90008814FB + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..da9b43d6e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,63 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +cat = true +cat.currency = true +cat.harvest = true + +[namespace>cat] + +duration = 0 + +[mosaics] + +cat:currency = true +cat:harvest = true + +[mosaic>cat:currency] + +divisibility = 6 +duration = 0 +supply = 8'998'999'998'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>cat:currency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 2'249'749'999'500'000 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 2'249'749'999'500'000 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 2'249'749'999'500'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 2'249'749'999'500'000 + +[mosaic>cat:harvest] + +divisibility = 3 +duration = 0 +supply = 15'000'000 +isTransferable = true +isSupplyMutable = true +isRestrictable = false + +[distribution>cat:harvest] +VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA = 3'750'000 +VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ = 3'750'000 +VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ = 3'750'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 3'750'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/transactions/remote_node.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/transactions/remote_node.bin new file mode 100644 index 000000000..5a1853570 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/transactions/remote_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/transactions/vrf_node.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/transactions/vrf_node.bin new file mode 100644 index 000000000..fb3a76804 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nemesis/transactions/vrf_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..5326659ec --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..537a75592 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhR8uIuuJYkMsNC27by9qC08A8LQBDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjIxOFoXDTQxMDcwMTE3MjIxOFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EApyw5E9wIP+3Pgq8k4gDgWYkJHK1Y +gBhb/9ZK5o1OUyQW5p7VP+4GzIEt28FknS6wzjo2pc8AHPdPtbNoM2c8Dw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..53dfa3258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMz4O6pWB6FCBkrFnBacOIpnzVbMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjE4WhcNMjIwNzE2MTcyMjE4WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EARyl5lm4aGHdHtYQy3Ofbe2OaT+p1GrVao0UL8TQO +CzkVQUBO5r3iSKFXMbsT31SEsWlM0a98bITrMLu24IQlCQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..5cbac37fb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMz4O6pWB6FCBkrFnBacOIpnzVbMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjE4WhcNMjIwNzE2MTcyMjE4WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EARyl5lm4aGHdHtYQy3Ofbe2OaT+p1GrVao0UL8TQO +CzkVQUBO5r3iSKFXMbsT31SEsWlM0a98bITrMLu24IQlCQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhR8uIuuJYkMsNC27by9qC08A8LQBDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjIxOFoXDTQxMDcwMTE3MjIxOFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EApyw5E9wIP+3Pgq8k4gDgWYkJHK1Y +gBhb/9ZK5o1OUyQW5p7VP+4GzIEt28FknS6wzjo2pc8AHPdPtbNoM2c8Dw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..5326659ec --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/preset.yml new file mode 100644 index 000000000..01b1e2d26 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/preset.yml @@ -0,0 +1,377 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +totalChainImportance: 15000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: cat +networkDescription: Symbol Local Bootstrap +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: currency + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 2249749999500000 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 2249749999500000 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 2249749999500000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 2249749999500000 + - + name: harvest + divisibility: 3 + duration: 0 + supply: 15000000 + isTransferable: true + isSupplyMutable: true + isRestrictable: false + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + currencyDistributions: + - + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + amount: 3750000 + - + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + amount: 3750000 + - + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ + amount: 3750000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 3750000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +faucetUrl: 'http://localhost:100' +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + host: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +wallets: + - + name: wallet + title: Symbol Bootstrap Wallet + openPort: '80' +explorers: + - + name: explorer + openPort: '90' + footer: + link: + - + href: 'https://nemflash.io/' + text: NEM News + icon: IconNewspaper + - + href: 'https://forum.nem.io/' + text: Forum + icon: IconForum + - + href: 'https://t.me/nemred' + text: Telegram + icon: IconTelegram + - + href: 'https://www.reddit.com/r/nem/' + text: Reddit + icon: IconReddit + - + href: 'https://github.com/nemtech' + text: Github + icon: IconGithub + - + href: 'http://localhost:100/' + text: Faucet + icon: IconHomeCurrencyUsd +faucets: + - + name: faucet + gateway: rest-gateway + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + openPort: '100' +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: dualCurrency +assembly: demo +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + - + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 788043551A590BA9 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/reports/node-config.csv new file mode 100644 index 000000000..1559cc57e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/reports/node-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; node; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/reports/node-config.rst new file mode 100644 index 000000000..85db475ce --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/reports/node-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; node; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/app.conf.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/app.conf.js new file mode 100644 index 000000000..6277c735e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/app.conf.js @@ -0,0 +1,23 @@ +var appConfig = { + title: 'Symbol Bootstrap Wallet', + constants: { + EVENTS_THROTTLING_TIME: 6000, + MAX_LISTENER_RECONNECT_TRIES: 20, + MAX_PASSWORD_LENGTH: 64, + MAX_REMOTE_ACCOUNT_CHECKS: 10, + MAX_SEED_ACCOUNTS_NUMBER: 10, + MIN_PASSWORD_LENGTH: 8, + SEED_ACCOUNT_NAME_PREFIX: 'SeedWallet-', + ANNOUNCE_TRANSACTION_TIMEOUT: 240000, + DECIMAL_SEPARATOR: Number('1.1').toLocaleString().substring(1, 2), + }, + languages: [ + { value: 'en-US', label: 'English' }, + { value: 'zh-CN', label: '中文' }, + { value: 'ja-JP', label: '日本語' }, + ], + marketServerUrl: 'http://app.nemcn.io', + articlesFeedUrl: 'http://rssmix.com/u/11801188/rss.xml', +} +window.appConfig = appConfig +console.log('appConfig loaded!', appConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/fees.conf.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/fees.conf.js new file mode 100644 index 000000000..1a40c3f28 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/fees.conf.js @@ -0,0 +1,9 @@ +var feesConfig = { + median: 10, + free: 0, + slow: 5, + slowest: 1, + fast: 20, +} +window.feesConfig = feesConfig +console.log('feesConfig loaded!', feesConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/network.conf.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/network.conf.js new file mode 100644 index 000000000..b915cec17 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/network.conf.js @@ -0,0 +1,37 @@ +var networkTypeConfig = { + "explorerUrl": "", + "faucetUrl": "http://localhost:100", + "defaultNetworkType": 168, + "defaultNodeUrl": "http://node:3000", + "networkConfigurationDefaults": { + "maxMosaicDivisibility": 6, + "namespaceGracePeriodDuration": 2592000, + "lockedFundsPerAggregate": "10000000", + "maxCosignatoriesPerAccount": 25, + "blockGenerationTargetTime": 15, + "maxNamespaceDepth": 3, + "maxMosaicDuration": 315360000, + "minNamespaceDuration": 60, + "maxNamespaceDuration": 31536000, + "maxTransactionsPerAggregate": 100, + "maxCosignedAccountsPerAccount": 25, + "maxMessageSize": 1024, + "maxMosaicAtomicUnits": 9000000000000000, + "currencyMosaicId": "5F54633454C3685B", + "harvestingMosaicId": "788043551A590BA9", + "defaultDynamicFeeMultiplier": 1000, + "epochAdjustment": 1573430400, + "totalChainImportance": 15000000, + "generationHash": "0000000000000000000000000000000000000000000000000000000000000CCC" + }, + "nodes": [ + {"friendlyName": "node", "roles": 2, "url": "http://node:3000"}, + ] +} +var networkConfig = { 168 : networkTypeConfig } +window.networkConfig = networkConfig +console.log('networkConfig loaded!', networkConfig) + + + + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/profileImporter.html b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/profileImporter.html new file mode 100644 index 000000000..bd0ee1add --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-demo-target/wallets/wallet/profileImporter.html @@ -0,0 +1,140 @@ + + + + + + Profile Importer + + + +

Profile Importer File Form

+ + +
+
+
+ + +
+ +

Profile Importer Text Form

+
+
+ +
+
+
Go back to the wallet + + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/addresses.yml new file mode 100644 index 000000000..49c4e47c5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/addresses.yml @@ -0,0 +1,55 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: 'Peer,Api' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: VDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPAOKEA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: VDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4AMJVEA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: currency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + - + id: 788043551A590BA9 + name: harvest + accounts: + - + publicKey: ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + - + publicKey: 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + - + publicKey: 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/docker-compose.yml new file mode 100644 index 000000000..486c0e258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/docker-compose.yml @@ -0,0 +1,68 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..734aa724d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQaruh5SG7yFTsadrJp/CxB2j3+yTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjIyNFoXDTQxMDcwMTE3MjIyNFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAabPPlc/lkRgCd9laiKPWliTBYeKQ +jNRcpZ6DiixHDcZZeBRG1N9ZHjXzOoUgVAGvApA9QKpD16QEbtcZ1JfHDw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..38cd50d1d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNiNw7p1j8RUObU7x5CzS2+vtc+MAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjI0WhcNMjIwNzE2MTcyMjI0WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAxhZJ0Wxz8tYx6hEHBubGmal1MOy96bRK+G7I/MhB +mduK3VSVQz27UHy8hcHw7/Lh1+IjhIhW/zaqywsBxaH7Ag== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..d6e5b09d4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..414d55bfc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/gateways/rest-gateway/rest.json @@ -0,0 +1,91 @@ +{ + "network": { + "name": "privateTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..dcd4a8d16 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..73927f972 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..a29521a64 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..a1dce5e5a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..ab14bd43a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..51e69286c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 4 + Voting Count: 0 + Voting Balance: 0 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: 3EDA68E393C380830EFFEE7C6DCA51B2BDD464F67731E8DE518FF823DD338823 + Receipts Hash: 979998750539314F9B5F9BC883886741A36F596ACA111A820F7A3CF02A5BF2AB + State Hash: 0E0207E90D120737D68455D8D62938A7849A3ADF060A98C75CE5A2E712167D2D +--- Components (9) --- + + 7FB48C0E2B03BD0C47F730B12B1CB4597238AC5EAF44EBA7C19054974349EEB4 + + 5862D7D6CD9EA5D5F946E0DAB4CFCDBA862E779BA4068973DCFF91AEF8AA89DA + + F2CAAF23AFE0E5FD8F1CFC2F5855A1E4C1C492BB8462FF92105E7B90008814FB + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..da9b43d6e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,63 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +cat = true +cat.currency = true +cat.harvest = true + +[namespace>cat] + +duration = 0 + +[mosaics] + +cat:currency = true +cat:harvest = true + +[mosaic>cat:currency] + +divisibility = 6 +duration = 0 +supply = 8'998'999'998'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>cat:currency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 2'249'749'999'500'000 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 2'249'749'999'500'000 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 2'249'749'999'500'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 2'249'749'999'500'000 + +[mosaic>cat:harvest] + +divisibility = 3 +duration = 0 +supply = 15'000'000 +isTransferable = true +isSupplyMutable = true +isRestrictable = false + +[distribution>cat:harvest] +VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA = 3'750'000 +VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ = 3'750'000 +VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ = 3'750'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 3'750'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/transactions/remote_node.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/transactions/remote_node.bin new file mode 100644 index 000000000..5a1853570 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/transactions/remote_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/transactions/vrf_node.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/transactions/vrf_node.bin new file mode 100644 index 000000000..fb3a76804 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nemesis/transactions/vrf_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..d6e5b09d4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..734aa724d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQaruh5SG7yFTsadrJp/CxB2j3+yTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjIyNFoXDTQxMDcwMTE3MjIyNFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAabPPlc/lkRgCd9laiKPWliTBYeKQ +jNRcpZ6DiixHDcZZeBRG1N9ZHjXzOoUgVAGvApA9QKpD16QEbtcZ1JfHDw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..38cd50d1d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNiNw7p1j8RUObU7x5CzS2+vtc+MAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjI0WhcNMjIwNzE2MTcyMjI0WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAxhZJ0Wxz8tYx6hEHBubGmal1MOy96bRK+G7I/MhB +mduK3VSVQz27UHy8hcHw7/Lh1+IjhIhW/zaqywsBxaH7Ag== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..ccdd7d49d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNiNw7p1j8RUObU7x5CzS2+vtc+MAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjI0WhcNMjIwNzE2MTcyMjI0WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAxhZJ0Wxz8tYx6hEHBubGmal1MOy96bRK+G7I/MhB +mduK3VSVQz27UHy8hcHw7/Lh1+IjhIhW/zaqywsBxaH7Ag== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQaruh5SG7yFTsadrJp/CxB2j3+yTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjIyNFoXDTQxMDcwMTE3MjIyNFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAabPPlc/lkRgCd9laiKPWliTBYeKQ +jNRcpZ6DiixHDcZZeBRG1N9ZHjXzOoUgVAGvApA9QKpD16QEbtcZ1JfHDw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..d6e5b09d4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/preset.yml new file mode 100644 index 000000000..1fadc2ca2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/preset.yml @@ -0,0 +1,328 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +totalChainImportance: 15000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: cat +networkDescription: Symbol Local Bootstrap +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: currency + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 2249749999500000 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 2249749999500000 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 2249749999500000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 2249749999500000 + - + name: harvest + divisibility: 3 + duration: 0 + supply: 15000000 + isTransferable: true + isSupplyMutable: true + isRestrictable: false + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + currencyDistributions: + - + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + amount: 3750000 + - + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + amount: 3750000 + - + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ + amount: 3750000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 3750000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: dualCurrency +assembly: dual +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + - + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +explorers: [] +wallets: [] +faucets: [] +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 788043551A590BA9 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/reports/node-config.csv new file mode 100644 index 000000000..2e7d13deb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/reports/node-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/reports/node-config.rst new file mode 100644 index 000000000..c4f0749f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-dual-target/reports/node-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/addresses.yml new file mode 100644 index 000000000..3d8475ca7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/addresses.yml @@ -0,0 +1,97 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: peer-node-0 + friendlyName: peer-node-0 + roles: 'Peer,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: VDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPAOKEA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: VDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4AMJVEA + voting: + - + publicKey: 675D847C23F181E8EA64A1DA926B99406C12155F630240622D26EBB9290A0B02 + startEpoch: 1 + endEpoch: 720 + filename: private_key_tree1.dat + - + name: peer-node-1 + friendlyName: peer-node-1 + roles: 'Peer,Voting' + main: + publicKey: F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8 + address: VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY + transport: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 404F4D08238867A2CBE61CB4D3AB5E6E8F69B6DBE80442025021F518B099BF8A + address: VAPMWPTZRETEQRNQ37UE72IAI4RHWXDH3DXJNBY + remote: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 3A6DF713A680D77EAF40BDD5DB1A701E52303BDC29314B9A0C00F17CF31B9AE4 + address: VCA7OHAAJTLWCIDAGOG4X5BTKBJRWMFLHGPFNAI + vrf: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: CF58C1A57E19B238B0D8DC1E74363C5BF399CF87251F4FF6A778B33946ADA34D + address: VC7B6MRPIOWQASLSHCXBKQ4ND4FH4TRGGYZQWYI + voting: + - + publicKey: 8AC4BCEE773D4D0511AC0D26BBB99A6D22A69E8BC20398AA03EA16640B5042EA + startEpoch: 1 + endEpoch: 720 + filename: private_key_tree1.dat + - + name: api-node-0 + friendlyName: api-node-0 + roles: Api + main: + publicKey: 65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2 + address: VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000BBBBB2 + publicKey: 051660FA2830C44E9DD2FD02A9E64A2878E013DEE5252B401D8B282D1C3A315D + address: VCNDEIWMTLC6R3KWMQOGHL7JMWGV5SYUTFO22MA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: currency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + - + id: 788043551A590BA9 + name: harvest + accounts: + - + publicKey: ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + - + publicKey: 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + - + publicKey: 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/docker-compose.yml new file mode 100644 index 000000000..9e7ee6b60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/docker-compose.yml @@ -0,0 +1,113 @@ +version: '2.4' +services: + db-0: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db-0 + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db-0 --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + ports: + - '27017:27017' + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db-0:/dbdata:rw' + peer-node-0: + user: '1000:1000' + container_name: peer-node-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-0 NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/peer-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - peer-node-0 + hostname: peer-node-0 + peer-node-1: + user: '1000:1000' + container_name: peer-node-1 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-1 NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7901:7900' + volumes: + - '../nodes/peer-node-1:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - peer-node-1 + hostname: peer-node-1 + api-node-0: + user: '1000:1000' + container_name: api-node-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-0 NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + volumes: + - '../nodes/api-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db-0 + - api-node-broker-0 + networks: + default: + aliases: + - api-node-0 + hostname: api-node-0 + api-node-broker-0: + user: '1000:1000' + container_name: api-node-broker-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-0 NORMAL + ports: + - '8002:7902' + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/api-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db-0 + rest-gateway-0: + container_name: rest-gateway-0 + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway-0:/symbol-workdir:rw' + depends_on: + - db-0 + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..dd3f287e5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH0MIGnAhQk+J8urCbai7qXhIUFBCxfzAsE7zAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjIyOVoXDTQxMDcwMTE3MjIy +OVowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA9BOv37hlaMn/ +3PYY1aFK9moURlpZL38AydHoFsXOB3EogXVCJn2/OvYWTHL2GjClkVTle7juqCdW +sshzITc3AQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..2659c03b4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHrMIGeAhMn0D0W3NzS2718L1b7+pOPpayfMAUGAytlcDAdMRswGQYDVQQDDBJh +cGktbm9kZS0wLWFjY291bnQwHhcNMjEwNzA2MTcyMjI5WhcNMjIwNzE2MTcyMjI5 +WjAVMRMwEQYDVQQDDAphcGktbm9kZS0wMCowBQYDK2VwAyEABRZg+igwxE6d0v0C +qeZKKHjgE97lJStAHYsoLRw6MV0wBQYDK2VwA0EAz2ZkbiNknFXZidfjDpTccif0 +f8UnFsxFL8K5D1tFZKuUAI66tQNTDdLvY2hVjYKLFibLy3KBDUpCRE/qmBZtAQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..f99b069e0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7uy +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties new file mode 100644 index 000000000..8d73e1fbb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/rest.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/rest.json new file mode 100644 index 000000000..89aa42eac --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/gateways/rest-gateway-0/rest.json @@ -0,0 +1,91 @@ +{ + "network": { + "name": "privateTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer" + ], + "db": { + "url": "mongodb://db-0:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "api-node-0", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "api-node-broker-0", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..edbb0adab Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..e562d06e2 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..a29521a64 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..3f5b5b4b5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..b9315df56 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..12565c82c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 6 + Voting Count: 2 + Voting Balance: 5000000 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: B0254443AFBFE5719A9560481CBFD6C451A79BE5AE33934CA040102F2C9B546A + Receipts Hash: 979998750539314F9B5F9BC883886741A36F596ACA111A820F7A3CF02A5BF2AB + State Hash: B0BB5145F05316A749C33194DE5DEAF40D740EED238CC20251DD993FACC39A1E +--- Components (9) --- + + 82D90C31A75D210C89555DE0B12EA8DA328CB9B2075643DFEE35CBE0C8243237 + + 5862D7D6CD9EA5D5F946E0DAB4CFCDBA862E779BA4068973DCFF91AEF8AA89DA + + F2CAAF23AFE0E5FD8F1CFC2F5855A1E4C1C492BB8462FF92105E7B90008814FB + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..5d3be122c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,67 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +cat = true +cat.currency = true +cat.harvest = true + +[namespace>cat] + +duration = 0 + +[mosaics] + +cat:currency = true +cat:harvest = true + +[mosaic>cat:currency] + +divisibility = 6 +duration = 0 +supply = 8'998'999'998'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>cat:currency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 1'499'833'333'000'000 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 1'499'833'333'000'000 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 1'499'833'333'000'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 1'499'833'333'000'000 +VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY = 1'499'833'333'000'000 +VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI = 1'499'833'333'000'000 + +[mosaic>cat:harvest] + +divisibility = 3 +duration = 0 +supply = 15'000'000 +isTransferable = true +isSupplyMutable = true +isRestrictable = false + +[distribution>cat:harvest] +VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA = 2'500'000 +VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ = 2'500'000 +VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ = 2'500'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 2'500'000 +VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY = 2'500'000 +VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI = 2'500'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/remote_peer-node-0.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/remote_peer-node-0.bin new file mode 100644 index 000000000..5a1853570 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/remote_peer-node-0.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/remote_peer-node-1.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/remote_peer-node-1.bin new file mode 100644 index 000000000..aa1be116a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/remote_peer-node-1.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/voting_peer-node-0.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/voting_peer-node-0.bin new file mode 100644 index 000000000..a1b045365 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/voting_peer-node-0.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/voting_peer-node-1.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/voting_peer-node-1.bin new file mode 100644 index 000000000..c7bbd9260 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/voting_peer-node-1.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/vrf_peer-node-0.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/vrf_peer-node-0.bin new file mode 100644 index 000000000..fb3a76804 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/vrf_peer-node-0.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/vrf_peer-node-1.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/vrf_peer-node-1.bin new file mode 100644 index 000000000..c4a172753 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nemesis/transactions/vrf_peer-node-1.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties new file mode 100644 index 000000000..7f0e9b10f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db-0:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties new file mode 100644 index 000000000..8d73e1fbb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..bf507f5d3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json @@ -0,0 +1,27 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/ca.cert.pem new file mode 100644 index 000000000..dd3f287e5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH0MIGnAhQk+J8urCbai7qXhIUFBCxfzAsE7zAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjIyOVoXDTQxMDcwMTE3MjIy +OVowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA9BOv37hlaMn/ +3PYY1aFK9moURlpZL38AydHoFsXOB3EogXVCJn2/OvYWTHL2GjClkVTle7juqCdW +sshzITc3AQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/ca.cnf new file mode 100644 index 000000000..1c97ff643 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = api-node-0-account diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem new file mode 100644 index 000000000..0cd8270a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAZceH1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9I= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/metadata.yml new file mode 100644 index 000000000..81846081b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 051660FA2830C44E9DD2FD02A9E64A2878E013DEE5252B401D8B282D1C3A315D +mainPublicKey: 65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.cnf new file mode 100644 index 000000000..04488fc2e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = api-node-0 + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.crt.pem new file mode 100644 index 000000000..2659c03b4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHrMIGeAhMn0D0W3NzS2718L1b7+pOPpayfMAUGAytlcDAdMRswGQYDVQQDDBJh +cGktbm9kZS0wLWFjY291bnQwHhcNMjEwNzA2MTcyMjI5WhcNMjIwNzE2MTcyMjI5 +WjAVMRMwEQYDVQQDDAphcGktbm9kZS0wMCowBQYDK2VwAyEABRZg+igwxE6d0v0C +qeZKKHjgE97lJStAHYsoLRw6MV0wBQYDK2VwA0EAz2ZkbiNknFXZidfjDpTccif0 +f8UnFsxFL8K5D1tFZKuUAI66tQNTDdLvY2hVjYKLFibLy3KBDUpCRE/qmBZtAQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.csr.pem new file mode 100644 index 000000000..695c438fa --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGUMEgCAQAwFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPoo +MMROndL9AqnmSih44BPe5SUrQB2LKC0cOjFdoAAwBQYDK2VwA0EAnBJxE2GzcR1F +ZiV+P4NchhSxCZwKYs1BKGayBvP+M73+SD7HMjVvLl7PJ0dueARJlaJ4EmbDrYha +yxHPltGUCQ== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.full.crt.pem new file mode 100644 index 000000000..e200540af --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.full.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIHrMIGeAhMn0D0W3NzS2718L1b7+pOPpayfMAUGAytlcDAdMRswGQYDVQQDDBJh +cGktbm9kZS0wLWFjY291bnQwHhcNMjEwNzA2MTcyMjI5WhcNMjIwNzE2MTcyMjI5 +WjAVMRMwEQYDVQQDDAphcGktbm9kZS0wMCowBQYDK2VwAyEABRZg+igwxE6d0v0C +qeZKKHjgE97lJStAHYsoLRw6MV0wBQYDK2VwA0EAz2ZkbiNknFXZidfjDpTccif0 +f8UnFsxFL8K5D1tFZKuUAI66tQNTDdLvY2hVjYKLFibLy3KBDUpCRE/qmBZtAQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH0MIGnAhQk+J8urCbai7qXhIUFBCxfzAsE7zAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjIyOVoXDTQxMDcwMTE3MjIy +OVowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA9BOv37hlaMn/ +3PYY1aFK9moURlpZL38AydHoFsXOB3EogXVCJn2/OvYWTHL2GjClkVTle7juqCdW +sshzITc3AQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.key.pem new file mode 100644 index 000000000..f99b069e0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7uy +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties new file mode 100644 index 000000000..7f0e9b10f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db-0:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties new file mode 100644 index 000000000..8d73e1fbb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..bf507f5d3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json @@ -0,0 +1,27 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/ca.cert.pem new file mode 100644 index 000000000..8c7560cb1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQm5EZ+pZkwVlhFbrcsBHTiw2C0njAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIyMjlaFw00MTA3MDExNzIy +MjlaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0wLWFjY291bnQwKjAFBgMrZXADIQB+ +0cFNzVZE323rJZByp38wjbJLAR2aytrq1yZe/S0/RzAFBgMrZXADQQCBqiDnx8fu +nydn+0msfQ3dBaa2uznHmNvhL1HwtNzp+6MNA1/9RUmg43VcB0X7GtFkap4WlwmM +mU+0zB6O0fwO +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/ca.cnf new file mode 100644 index 000000000..82efc4d8c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-0-account diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.cnf new file mode 100644 index 000000000..831a2d17f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-0 + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.crt.pem new file mode 100644 index 000000000..ccbc5604b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhMDeMCMCriYWtzWqFcIzMhllQQxMAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjIyOVoXDTIyMDcxNjE3MjIy +OVowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn8k5EsqTO +oz8FWYWMLr8mAvilUMW92wtxAAxJmDAFBgMrZXADQQBFIhwXOP5byPSbWRbtA6l+ ++cZNZqfB04Ec2xmWpO7gdGg3gq1+cyiTuRgBy4UYXpgZ8NhGy8aVkT1OUMWkt1gP +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.csr.pem new file mode 100644 index 000000000..e5d6fef03 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGVMEkCAQAwFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn +8k5EsqTOoz8FWYWMLr8mAvilUMW92wtxAAxJmKAAMAUGAytlcANBAM/u7hnlO8Fc +fvqI6Cp8WcabjiTW6njd4v+ikUsrOgXnoSIAsl0FUp98QiNHkC9lHZFClW2vm0LX +2xKxaRlK5w4= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem new file mode 100644 index 000000000..3c7d3b8e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhMDeMCMCriYWtzWqFcIzMhllQQxMAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjIyOVoXDTIyMDcxNjE3MjIy +OVowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn8k5EsqTO +oz8FWYWMLr8mAvilUMW92wtxAAxJmDAFBgMrZXADQQBFIhwXOP5byPSbWRbtA6l+ ++cZNZqfB04Ec2xmWpO7gdGg3gq1+cyiTuRgBy4UYXpgZ8NhGy8aVkT1OUMWkt1gP +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQm5EZ+pZkwVlhFbrcsBHTiw2C0njAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIyMjlaFw00MTA3MDExNzIy +MjlaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0wLWFjY291bnQwKjAFBgMrZXADIQB+ +0cFNzVZE323rJZByp38wjbJLAR2aytrq1yZe/S0/RzAFBgMrZXADQQCBqiDnx8fu +nydn+0msfQ3dBaa2uznHmNvhL1HwtNzp+6MNA1/9RUmg43VcB0X7GtFkap4WlwmM +mU+0zB6O0fwO +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..bc1afb502 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties new file mode 100644 index 000000000..6ba442ba3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = peer-node-0 +friendlyName = peer-node-0 +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json new file mode 100644 index 000000000..9719af8d9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2", + "endpoint": { + "host": "api-node-0", + "port": 7900 + }, + "metadata": { + "name": "api-node-0", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..bf1ef2889 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..43bf6f3b5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/ca.cert.pem new file mode 100644 index 000000000..6aeb33ba9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH2MIGpAhRCgmlaSmuLsxVwgBZBDmKqMsUUdTAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIyMjlaFw00MTA3MDExNzIy +MjlaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0xLWFjY291bnQwKjAFBgMrZXADIQD4 +4NlAAllAcZQdq4GsRVQ5CT1K4LDcxF7jazCmHx0suDAFBgMrZXADQQDeeekAorpG +FXnpuG44Y4DTokAucpTmHt8SYHBaW8SzXX3mHoTaL/gfcS4XGsn5cZk0QqpSh2X+ +3My6rni7gvYM +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/ca.cnf new file mode 100644 index 000000000..d771d6d2f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-1-account diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem new file mode 100644 index 000000000..ed75563ae --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEA+ODZQAJZQHGUHauBrEVUOQk9SuCw3MRe42swph8dLLg= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/metadata.yml new file mode 100644 index 000000000..83cf1581d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 404F4D08238867A2CBE61CB4D3AB5E6E8F69B6DBE80442025021F518B099BF8A +mainPublicKey: F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.cnf new file mode 100644 index 000000000..cfd4a8a75 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-1 + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.crt.pem new file mode 100644 index 000000000..e87f87187 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhMQkEGH3aZd5Vg5ctGASKYGA0jFMAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMS1hY2NvdW50MB4XDTIxMDcwNjE3MjIyOVoXDTIyMDcxNjE3MjIy +OVowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTEwKjAFBgMrZXADIQBAT00II4hnosvm +HLTTq15uj2m22+gEQgJQIfUYsJm/ijAFBgMrZXADQQCNEFF8yoaHp6/33ChqcmkF +FvaXGuQuJwRrUg2oFIGqyFeHX0QM37h+AGfOUC2lwkBvGDp4DeORSVXBEQXDIbkK +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.csr.pem new file mode 100644 index 000000000..242155349 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGVMEkCAQAwFjEUMBIGA1UEAwwLcGVlci1ub2RlLTEwKjAFBgMrZXADIQBAT00I +I4hnosvmHLTTq15uj2m22+gEQgJQIfUYsJm/iqAAMAUGAytlcANBAGnB/L4O415m +MlD4wzlzH8g+mtHT/16Ca5USb4VK5yVOpe6qvOF0npB3X4/vRLeSldTIiRHqgsTS +vmKepVDfpwM= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem new file mode 100644 index 000000000..40d80422c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhMQkEGH3aZd5Vg5ctGASKYGA0jFMAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMS1hY2NvdW50MB4XDTIxMDcwNjE3MjIyOVoXDTIyMDcxNjE3MjIy +OVowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTEwKjAFBgMrZXADIQBAT00II4hnosvm +HLTTq15uj2m22+gEQgJQIfUYsJm/ijAFBgMrZXADQQCNEFF8yoaHp6/33ChqcmkF +FvaXGuQuJwRrUg2oFIGqyFeHX0QM37h+AGfOUC2lwkBvGDp4DeORSVXBEQXDIbkK +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH2MIGpAhRCgmlaSmuLsxVwgBZBDmKqMsUUdTAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIyMjlaFw00MTA3MDExNzIy +MjlaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0xLWFjY291bnQwKjAFBgMrZXADIQD4 +4NlAAllAcZQdq4GsRVQ5CT1K4LDcxF7jazCmHx0suDAFBgMrZXADQQDeeekAorpG +FXnpuG44Y4DTokAucpTmHt8SYHBaW8SzXX3mHoTaL/gfcS4XGsn5cZk0QqpSh2X+ +3My6rni7gvYM +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.key.pem new file mode 100644 index 000000000..f2722b855 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..bc1afb502 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..f88dc0bff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 1000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 1000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties new file mode 100644 index 000000000..db6cc0e4c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = peer-node-1 +friendlyName = peer-node-1 +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json new file mode 100644 index 000000000..9719af8d9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2", + "endpoint": { + "host": "api-node-0", + "port": 7900 + }, + "metadata": { + "name": "api-node-0", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..7f8526360 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..d65186143 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/preset.yml new file mode 100644 index 000000000..65836e166 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/preset.yml @@ -0,0 +1,374 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +totalChainImportance: 15000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: cat +networkDescription: Symbol Local Bootstrap +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: currency + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 1499833333000000 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 1499833333000000 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 1499833333000000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 1499833333000000 + - + address: VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY + amount: 1499833333000000 + - + address: VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI + amount: 1499833333000000 + - + name: harvest + divisibility: 3 + duration: 0 + supply: 15000000 + isTransferable: true + isSupplyMutable: true + isRestrictable: false + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + currencyDistributions: + - + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + amount: 2500000 + - + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + amount: 2500000 + - + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ + amount: 2500000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 2500000 + - + address: VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY + amount: 2500000 + - + address: VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI + amount: 2500000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +explorerUrl: 'http://localhost:90' +faucetUrl: 'http://localhost:100' +databases: + - + name: db-0 + openPort: '27017' +nodes: + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + voting: true + api: false + name: peer-node-0 + friendlyName: peer-node-0 + host: peer-node-0 + openPort: '7900' + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + voting: true + api: false + name: peer-node-1 + friendlyName: peer-node-1 + host: peer-node-1 + openPort: '7901' + - + syncsource: false + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: false + api: true + friendlyName: api-node-0 + name: api-node-0 + host: api-node-0 + brokerName: api-node-broker-0 + brokerOpenPort: '8002' + databaseHost: db-0 + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + apiNodeName: api-node-0 + apiNodeHost: api-node-0 + apiNodeBrokerHost: api-node-broker-0 + name: rest-gateway-0 + description: '' + databaseHost: db-0 + openPort: '3000' + ipv4_address: 172.20.0.25 +wallets: [] +explorers: [] +faucets: [] +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: dualCurrency +assembly: multinode +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + - + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 788043551A590BA9 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/api-node-0-config.csv b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/api-node-0-config.csv new file mode 100644 index 000000000..9595d6151 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/api-node-0-config.csv @@ -0,0 +1,434 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db-0:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; false +extension.syncsource; false +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; api-node-0; string; Node host (leave empty to auto-detect IP). +friendlyName; api-node-0; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/api-node-0-config.rst b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/api-node-0-config.rst new file mode 100644 index 000000000..a5ded4e2f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/api-node-0-config.rst @@ -0,0 +1,453 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db-0:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; false + extension.syncsource; false + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; api-node-0; string; Node host (leave empty to auto-detect IP). + friendlyName; api-node-0; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-0-config.csv b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-0-config.csv new file mode 100644 index 000000000..38a05dfb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-0-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; peer-node-0; string; Node host (leave empty to auto-detect IP). +friendlyName; peer-node-0; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-0-config.rst b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-0-config.rst new file mode 100644 index 000000000..09e13230e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-0-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; peer-node-0; string; Node host (leave empty to auto-detect IP). + friendlyName; peer-node-0; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-1-config.csv b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-1-config.csv new file mode 100644 index 000000000..762ab3b36 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-1-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; peer-node-1; string; Node host (leave empty to auto-detect IP). +friendlyName; peer-node-1; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-1-config.rst b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-1-config.rst new file mode 100644 index 000000000..700290bd3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-multinode-target/reports/peer-node-1-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; peer-node-1; string; Node host (leave empty to auto-detect IP). + friendlyName; peer-node-1; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/addresses.yml new file mode 100644 index 000000000..022b311fd --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/addresses.yml @@ -0,0 +1,55 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: Peer + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: VDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPAOKEA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: VDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4AMJVEA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: currency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + - + id: 788043551A590BA9 + name: harvest + accounts: + - + publicKey: ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + - + publicKey: 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + - + publicKey: 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/docker-compose.yml new file mode 100644 index 000000000..963e7712d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2.4' +services: + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..dcd4a8d16 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..73927f972 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..a29521a64 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..a1dce5e5a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..ab14bd43a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..51e69286c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 4 + Voting Count: 0 + Voting Balance: 0 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: 3EDA68E393C380830EFFEE7C6DCA51B2BDD464F67731E8DE518FF823DD338823 + Receipts Hash: 979998750539314F9B5F9BC883886741A36F596ACA111A820F7A3CF02A5BF2AB + State Hash: 0E0207E90D120737D68455D8D62938A7849A3ADF060A98C75CE5A2E712167D2D +--- Components (9) --- + + 7FB48C0E2B03BD0C47F730B12B1CB4597238AC5EAF44EBA7C19054974349EEB4 + + 5862D7D6CD9EA5D5F946E0DAB4CFCDBA862E779BA4068973DCFF91AEF8AA89DA + + F2CAAF23AFE0E5FD8F1CFC2F5855A1E4C1C492BB8462FF92105E7B90008814FB + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..da9b43d6e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,63 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +cat = true +cat.currency = true +cat.harvest = true + +[namespace>cat] + +duration = 0 + +[mosaics] + +cat:currency = true +cat:harvest = true + +[mosaic>cat:currency] + +divisibility = 6 +duration = 0 +supply = 8'998'999'998'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>cat:currency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 2'249'749'999'500'000 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 2'249'749'999'500'000 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 2'249'749'999'500'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 2'249'749'999'500'000 + +[mosaic>cat:harvest] + +divisibility = 3 +duration = 0 +supply = 15'000'000 +isTransferable = true +isSupplyMutable = true +isRestrictable = false + +[distribution>cat:harvest] +VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA = 3'750'000 +VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ = 3'750'000 +VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ = 3'750'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 3'750'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/transactions/remote_node.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/transactions/remote_node.bin new file mode 100644 index 000000000..5a1853570 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/transactions/remote_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/transactions/vrf_node.bin b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/transactions/vrf_node.bin new file mode 100644 index 000000000..fb3a76804 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nemesis/transactions/vrf_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..5a020b192 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ2snRB8l+mWgtJgY3KzRoyhe7j8zAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjIzNloXDTQxMDcwMTE3MjIzNlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAjLpGUAdA+6e0ijtVu6JtAxKkrF9F +QCu6H2+zg+JMKU0j8Zcvw6kLwiRJW9O6LrqjX/OY9fk2r68/MqYUnqFABg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..cff16b9ac --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNPSUeOM2cm7QmLyqRSzeH1u2s5MAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjM2WhcNMjIwNzE2MTcyMjM2WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAWUALuqn8G0weTwOgNjkb1zvFrBfYI9FiCyM4Fdvk +Pm48RiEj4ktNipUeFiMa0cXyHtcnVY6Eq/wuf8+I2U8tAg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..ad93a2392 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNPSUeOM2cm7QmLyqRSzeH1u2s5MAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjM2WhcNMjIwNzE2MTcyMjM2WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAWUALuqn8G0weTwOgNjkb1zvFrBfYI9FiCyM4Fdvk +Pm48RiEj4ktNipUeFiMa0cXyHtcnVY6Eq/wuf8+I2U8tAg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ2snRB8l+mWgtJgY3KzRoyhe7j8zAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjIzNloXDTQxMDcwMTE3MjIzNlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAjLpGUAdA+6e0ijtVu6JtAxKkrF9F +QCu6H2+zg+JMKU0j8Zcvw6kLwiRJW9O6LrqjX/OY9fk2r68/MqYUnqFABg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..012758424 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x7880'4355'1A59'0BA9 + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 15'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..0280886a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/preset.yml new file mode 100644 index 000000000..035241c2d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/preset.yml @@ -0,0 +1,311 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +totalChainImportance: 15000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: cat +networkDescription: Symbol Local Bootstrap +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: currency + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 2249749999500000 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 2249749999500000 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 2249749999500000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 2249749999500000 + - + name: harvest + divisibility: 3 + duration: 0 + supply: 15000000 + isTransferable: true + isSupplyMutable: true + isRestrictable: false + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + currencyDistributions: + - + address: VCO4GRBYBGLZ2RCFZHQF2Q7OEWO3YM5MHPWKYHA + amount: 3750000 + - + address: VCDYBW6PESMLDFZYMOKQBORLCSOKKKE4NIDKQAQ + amount: 3750000 + - + address: VAZIXYUUIJXJA5BJNZLEYQ5FHM3T44OEKEV7VBQ + amount: 3750000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 3750000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +nodes: + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + api: false + name: node + openPort: true +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: dualCurrency +assembly: peer +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + - + accounts: + - ECE129580F3B97B378A211DB3D41EC47A03B69750F367233AC48D239738D5BB5 + - 9F56C0954467B62F3E8CAC52B9CF07E22E8601DADEE414F458AD90965269B483 + - 725286CE39E11BFB8DCC3D43E45CF8262D548027D1C5BF94258D9743576EC9DE + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +databases: [] +gateways: [] +explorers: [] +wallets: [] +faucets: [] +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 788043551A590BA9 diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/reports/node-config.csv new file mode 100644 index 000000000..033f72908 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/reports/node-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/reports/node-config.rst new file mode 100644 index 000000000..e4c4b5d05 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/dualCurrency-peer-target/reports/node-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x7880'4355'1A59'0BA9; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/addresses.yml new file mode 100644 index 000000000..514f2dc82 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/addresses.yml @@ -0,0 +1,15 @@ +version: 2 +networkType: 104 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: Api + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: NBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TYKV3Q diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/docker-compose.yml new file mode 100644 index 000000000..486c0e258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/docker-compose.yml @@ -0,0 +1,68 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..2c10c83d1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRfG2e+JIImqpnFi1tGxQjr9L9UfTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxOVoXDTQxMDcwMTE3MjMxOVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAB37ZwHE33d7Np+ebNfmVQ/iGGv4c +BcfMmoHS6Efn/qCTT2+w9w7HjHa8u/z+lxlLUHR3UapLIwx6ZoDvetPHBA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..7d686fb0a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAyH6IxkEjX6IVM3VOQsOhbY9oQjAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxOVoXDTIyMDcxNjE3MjMxOVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAIuw4FRykz36fOZ5HGAhXsj2GDooocdbFZQ6H97k +EaGLlALnIvEp/W/oSHzyFHUUBJ22MOPThJd48qY8rjnfRws= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..635b187b1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..440c913ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "public", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..5301f739e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6bb65803d Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..8ef9324a5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..645a1b893 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..7b6255440 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..635b187b1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..2c10c83d1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRfG2e+JIImqpnFi1tGxQjr9L9UfTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxOVoXDTQxMDcwMTE3MjMxOVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAB37ZwHE33d7Np+ebNfmVQ/iGGv4c +BcfMmoHS6Efn/qCTT2+w9w7HjHa8u/z+lxlLUHR3UapLIwx6ZoDvetPHBA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..7d686fb0a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAyH6IxkEjX6IVM3VOQsOhbY9oQjAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxOVoXDTIyMDcxNjE3MjMxOVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAIuw4FRykz36fOZ5HGAhXsj2GDooocdbFZQ6H97k +EaGLlALnIvEp/W/oSHzyFHUUBJ22MOPThJd48qY8rjnfRws= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..8f951bcea --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAyH6IxkEjX6IVM3VOQsOhbY9oQjAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxOVoXDTIyMDcxNjE3MjMxOVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAIuw4FRykz36fOZ5HGAhXsj2GDooocdbFZQ6H97k +EaGLlALnIvEp/W/oSHzyFHUUBJ22MOPThJd48qY8rjnfRws= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRfG2e+JIImqpnFi1tGxQjr9L9UfTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxOVoXDTQxMDcwMTE3MjMxOVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAB37ZwHE33d7Np+ebNfmVQ/iGGv4c +BcfMmoHS6Efn/qCTT2+w9w7HjHa8u/z+lxlLUHR3UapLIwx6ZoDvetPHBA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..635b187b1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/preset.yml new file mode 100644 index 000000000..98285e3fd --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/preset.yml @@ -0,0 +1,1546 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1615853185s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: Symbol Mainnet +baseNamespace: symbol +currencyMosaicId: 6BED913FA20223F8 +harvestingMosaicId: 6BED913FA20223F8 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +harvestNetworkFeeSinkAddress: NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI +namespaceRentalFeeSinkAddress: NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +mosaicRentalFeeSinkAddress: NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +nemesisSignerPublicKey: BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +networkType: 104 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: NDG2F6IHON7EDOXZCHSTSJ2YMUHDFXAQ2EUZHFA +rewardProgramControllerApiUrl: 'http://node-monitoring.symbolblockchain.io:7890' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 224 +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-001.symbolblockchain.io:3000' + - 'http://ngl-dual-002.symbolblockchain.io:3000' + - 'http://ngl-dual-003.symbolblockchain.io:3000' + - 'http://ngl-dual-004.symbolblockchain.io:3000' + - 'http://ngl-dual-101.symbolblockchain.io:3000' + - 'http://ngl-dual-102.symbolblockchain.io:3000' + - 'http://ngl-dual-103.symbolblockchain.io:3000' + - 'http://ngl-dual-104.symbolblockchain.io:3000' + - 'http://ngl-dual-201.symbolblockchain.io:3000' + - 'http://ngl-dual-202.symbolblockchain.io:3000' + - 'http://ngl-dual-203.symbolblockchain.io:3000' + - 'http://ngl-dual-204.symbolblockchain.io:3000' + - 'http://ngl-dual-301.symbolblockchain.io:3000' + - 'http://ngl-dual-302.symbolblockchain.io:3000' + - 'http://ngl-dual-303.symbolblockchain.io:3000' + - 'http://ngl-dual-304.symbolblockchain.io:3000' + - 'http://ngl-dual-401.symbolblockchain.io:3000' + - 'http://ngl-dual-402.symbolblockchain.io:3000' + - 'http://ngl-dual-403.symbolblockchain.io:3000' + - 'http://ngl-dual-404.symbolblockchain.io:3000' + - 'http://ngl-dual-501.symbolblockchain.io:3000' + - 'http://ngl-dual-502.symbolblockchain.io:3000' + - 'http://ngl-dual-503.symbolblockchain.io:3000' + - 'http://ngl-dual-504.symbolblockchain.io:3000' + - 'http://ngl-dual-601.symbolblockchain.io:3000' + - 'http://ngl-dual-602.symbolblockchain.io:3000' + - 'http://ngl-dual-603.symbolblockchain.io:3000' + - 'http://ngl-dual-604.symbolblockchain.io:3000' + - 'http://ngl-dual-005.symbolblockchain.io:3000' + - 'http://ngl-dual-006.symbolblockchain.io:3000' + - 'http://ngl-dual-105.symbolblockchain.io:3000' + - 'http://ngl-dual-106.symbolblockchain.io:3000' + - 'http://ngl-dual-205.symbolblockchain.io:3000' + - 'http://ngl-dual-206.symbolblockchain.io:3000' + - 'http://ngl-dual-305.symbolblockchain.io:3000' + - 'http://ngl-dual-306.symbolblockchain.io:3000' + - 'http://ngl-dual-405.symbolblockchain.io:3000' + - 'http://ngl-dual-406.symbolblockchain.io:3000' + - 'http://ngl-dual-505.symbolblockchain.io:3000' + - 'http://ngl-dual-506.symbolblockchain.io:3000' + - 'http://ngl-dual-605.symbolblockchain.io:3000' + - 'http://ngl-dual-606.symbolblockchain.io:3000' + - 'http://ngl-api-001.symbolblockchain.io:3000' + - 'http://ngl-api-301.symbolblockchain.io:3000' + - 'http://ngl-api-401.symbolblockchain.io:3000' + - 'http://ngl-api-501.symbolblockchain.io:3000' + - 'http://ngl-api-601.symbolblockchain.io:3000' +knownPeers: + api-node: + - + publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - + publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - + publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - + publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - + publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - + publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - + publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - + publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - + publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - + publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - + publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - + publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - + publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - + publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - + publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - + publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - + publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - + publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - + publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - + publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - + publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - + publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - + publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - + publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - + publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - + publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - + publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - + publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - + publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - + publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - + publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - + publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - + publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - + publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - + publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - + publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - + publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - + publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - + publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - + publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - + publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - + publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api + peer-node: + - + publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - + publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - + publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - + publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - + publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - + publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - + publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - + publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - + publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - + publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - + publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - + publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - + publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - + publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - + publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - + publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - + publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - + publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - + publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - + publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - + publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - + publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - + publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - + publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - + publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - + publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - + publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - + publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - + publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - + publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - + publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - + publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - + publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - + publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - + publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - + publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - + publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - + publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - + publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - + publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - + publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - + publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - + publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - + publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - + publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: false + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: false + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: mainnet +assembly: api +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public +networkName: public diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/reports/node-config.csv new file mode 100644 index 000000000..6df0079c6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/reports/node-config.csv @@ -0,0 +1,855 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; false +extension.syncsource; false +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; +epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/reports/node-config.rst new file mode 100644 index 000000000..d667cd30f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-api-target/reports/node-config.rst @@ -0,0 +1,874 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; false + extension.syncsource; false + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; + epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/addresses.yml new file mode 100644 index 000000000..4ca3736b4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/addresses.yml @@ -0,0 +1,23 @@ +version: 2 +networkType: 104 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: 'Peer,Api' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: NBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TYKV3Q + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: NDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPRBXQQ + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: NDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4B26GQI diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/docker-compose.yml new file mode 100644 index 000000000..caa6ebe46 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/docker-compose.yml @@ -0,0 +1,117 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - node + hostname: node + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 + wallet: + container_name: wallet + image: 'symbolplatform/symbol-desktop-wallet:1.0.1' + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '80:80' + restart: 'on-failure:2' + volumes: + - '../wallets/wallet:/usr/share/nginx/html/config:ro' + explorer: + container_name: explorer + image: 'symbolplatform/symbol-explorer:1.1.0-alpha' + entrypoint: ash -c "/bin/ash /symbol-commands/run.sh explorer" + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '90:4000' + restart: 'on-failure:2' + volumes: + - '../explorers/explorer:/symbol-workdir:ro' + - './explorer:/symbol-commands:ro' + faucet: + container_name: faucet + image: 'symbolplatform/symbol-faucet:1.0.1-alpha' + stop_signal: SIGINT + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + NATIVE_CURRENCY_NAME: symbol.xym + FAUCET_PRIVATE_KEY: '' + NATIVE_CURRENCY_ID: 6BED913FA20223F8 + restart: 'on-failure:2' + ports: + - '100:4000' + depends_on: + - rest-gateway +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/explorers/explorer/default.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/explorers/explorer/default.json new file mode 100644 index 000000000..33f40548a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/explorers/explorer/default.json @@ -0,0 +1,99 @@ +{ + "peersApi": { + "defaultNode": "http://node:3000", + "nodes": [ + "http://node:3000", + "http://ngl-dual-001.symbolblockchain.io:3000", + "http://ngl-dual-002.symbolblockchain.io:3000", + "http://ngl-dual-003.symbolblockchain.io:3000", + "http://ngl-dual-004.symbolblockchain.io:3000", + "http://ngl-dual-101.symbolblockchain.io:3000", + "http://ngl-dual-102.symbolblockchain.io:3000", + "http://ngl-dual-103.symbolblockchain.io:3000", + "http://ngl-dual-104.symbolblockchain.io:3000", + "http://ngl-dual-201.symbolblockchain.io:3000", + "http://ngl-dual-202.symbolblockchain.io:3000", + "http://ngl-dual-203.symbolblockchain.io:3000", + "http://ngl-dual-204.symbolblockchain.io:3000", + "http://ngl-dual-301.symbolblockchain.io:3000", + "http://ngl-dual-302.symbolblockchain.io:3000", + "http://ngl-dual-303.symbolblockchain.io:3000", + "http://ngl-dual-304.symbolblockchain.io:3000", + "http://ngl-dual-401.symbolblockchain.io:3000", + "http://ngl-dual-402.symbolblockchain.io:3000", + "http://ngl-dual-403.symbolblockchain.io:3000", + "http://ngl-dual-404.symbolblockchain.io:3000", + "http://ngl-dual-501.symbolblockchain.io:3000", + "http://ngl-dual-502.symbolblockchain.io:3000", + "http://ngl-dual-503.symbolblockchain.io:3000", + "http://ngl-dual-504.symbolblockchain.io:3000", + "http://ngl-dual-601.symbolblockchain.io:3000", + "http://ngl-dual-602.symbolblockchain.io:3000", + "http://ngl-dual-603.symbolblockchain.io:3000", + "http://ngl-dual-604.symbolblockchain.io:3000", + "http://ngl-dual-005.symbolblockchain.io:3000", + "http://ngl-dual-006.symbolblockchain.io:3000", + "http://ngl-dual-105.symbolblockchain.io:3000", + "http://ngl-dual-106.symbolblockchain.io:3000", + "http://ngl-dual-205.symbolblockchain.io:3000", + "http://ngl-dual-206.symbolblockchain.io:3000", + "http://ngl-dual-305.symbolblockchain.io:3000", + "http://ngl-dual-306.symbolblockchain.io:3000", + "http://ngl-dual-405.symbolblockchain.io:3000", + "http://ngl-dual-406.symbolblockchain.io:3000", + "http://ngl-dual-505.symbolblockchain.io:3000", + "http://ngl-dual-506.symbolblockchain.io:3000", + "http://ngl-dual-605.symbolblockchain.io:3000", + "http://ngl-dual-606.symbolblockchain.io:3000", + "http://ngl-api-001.symbolblockchain.io:3000", + "http://ngl-api-301.symbolblockchain.io:3000", + "http://ngl-api-401.symbolblockchain.io:3000", + "http://ngl-api-501.symbolblockchain.io:3000", + "http://ngl-api-601.symbolblockchain.io:3000" + ] + }, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "symbol.xym", + "mosaicId": "6BED913FA20223F8", + "divisibility": "6", + "namespaceId": "E74B99BA41F4AFEE", + "networkIdentifier": 104 + }, + "footer": { + "link": [ + { + "href": "https://nemflash.io/", + "text": "NEM News", + "icon": "IconNewspaper" + }, + { + "href": "https://forum.nem.io/", + "text": "Forum", + "icon": "IconForum" + }, + { + "href": "https://t.me/nemred", + "text": "Telegram", + "icon": "IconTelegram" + }, + { + "href": "https://www.reddit.com/r/nem/", + "text": "Reddit", + "icon": "IconReddit" + }, + { + "href": "https://github.com/nemtech", + "text": "Github", + "icon": "IconGithub" + }, + { + "href": "http://localhost:100/", + "text": "Faucet", + "icon": "IconHomeCurrencyUsd" + } + ] + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..244ade956 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRAGK4ytbSAb9MQob6QIhZIoAPN8DAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyMVoXDTQxMDcwMTE3MjMyMVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EANweIHfat3HlFzPDdJoHV+tyD14hP +AK4Kgbdd1lcqkT3L1RcD2NNQXb4G+raMU7CbJtbgFxNVCh+Qc0PX10CJDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..92e572608 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAnq44X5A4D5k0EvEOqxvteKO9QTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyMVoXDTIyMDcxNjE3MjMyMVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAFwEwFx6HcLhQhHqEkWS/CHpr472fX3WMcfsEzJC +2uoJSOurSiN/hmnRXUpSmQVq8c8nnbKAgg2okJTklSqhlwA= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..3fcfa858b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..440c913ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "public", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..5301f739e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6bb65803d Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..8ef9324a5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..645a1b893 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..7b6255440 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..3fcfa858b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..244ade956 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRAGK4ytbSAb9MQob6QIhZIoAPN8DAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyMVoXDTQxMDcwMTE3MjMyMVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EANweIHfat3HlFzPDdJoHV+tyD14hP +AK4Kgbdd1lcqkT3L1RcD2NNQXb4G+raMU7CbJtbgFxNVCh+Qc0PX10CJDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..92e572608 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAnq44X5A4D5k0EvEOqxvteKO9QTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyMVoXDTIyMDcxNjE3MjMyMVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAFwEwFx6HcLhQhHqEkWS/CHpr472fX3WMcfsEzJC +2uoJSOurSiN/hmnRXUpSmQVq8c8nnbKAgg2okJTklSqhlwA= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..2f1eba331 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAnq44X5A4D5k0EvEOqxvteKO9QTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyMVoXDTIyMDcxNjE3MjMyMVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAFwEwFx6HcLhQhHqEkWS/CHpr472fX3WMcfsEzJC +2uoJSOurSiN/hmnRXUpSmQVq8c8nnbKAgg2okJTklSqhlwA= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRAGK4ytbSAb9MQob6QIhZIoAPN8DAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyMVoXDTQxMDcwMTE3MjMyMVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EANweIHfat3HlFzPDdJoHV+tyD14hP +AK4Kgbdd1lcqkT3L1RcD2NNQXb4G+raMU7CbJtbgFxNVCh+Qc0PX10CJDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..3fcfa858b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/preset.yml new file mode 100644 index 000000000..6a08e22bf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/preset.yml @@ -0,0 +1,1595 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1615853185s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: Symbol Mainnet +baseNamespace: symbol +currencyMosaicId: 6BED913FA20223F8 +harvestingMosaicId: 6BED913FA20223F8 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +harvestNetworkFeeSinkAddress: NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI +namespaceRentalFeeSinkAddress: NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +mosaicRentalFeeSinkAddress: NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +nemesisSignerPublicKey: BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +networkType: 104 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: NDG2F6IHON7EDOXZCHSTSJ2YMUHDFXAQ2EUZHFA +rewardProgramControllerApiUrl: 'http://node-monitoring.symbolblockchain.io:7890' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 224 +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-001.symbolblockchain.io:3000' + - 'http://ngl-dual-002.symbolblockchain.io:3000' + - 'http://ngl-dual-003.symbolblockchain.io:3000' + - 'http://ngl-dual-004.symbolblockchain.io:3000' + - 'http://ngl-dual-101.symbolblockchain.io:3000' + - 'http://ngl-dual-102.symbolblockchain.io:3000' + - 'http://ngl-dual-103.symbolblockchain.io:3000' + - 'http://ngl-dual-104.symbolblockchain.io:3000' + - 'http://ngl-dual-201.symbolblockchain.io:3000' + - 'http://ngl-dual-202.symbolblockchain.io:3000' + - 'http://ngl-dual-203.symbolblockchain.io:3000' + - 'http://ngl-dual-204.symbolblockchain.io:3000' + - 'http://ngl-dual-301.symbolblockchain.io:3000' + - 'http://ngl-dual-302.symbolblockchain.io:3000' + - 'http://ngl-dual-303.symbolblockchain.io:3000' + - 'http://ngl-dual-304.symbolblockchain.io:3000' + - 'http://ngl-dual-401.symbolblockchain.io:3000' + - 'http://ngl-dual-402.symbolblockchain.io:3000' + - 'http://ngl-dual-403.symbolblockchain.io:3000' + - 'http://ngl-dual-404.symbolblockchain.io:3000' + - 'http://ngl-dual-501.symbolblockchain.io:3000' + - 'http://ngl-dual-502.symbolblockchain.io:3000' + - 'http://ngl-dual-503.symbolblockchain.io:3000' + - 'http://ngl-dual-504.symbolblockchain.io:3000' + - 'http://ngl-dual-601.symbolblockchain.io:3000' + - 'http://ngl-dual-602.symbolblockchain.io:3000' + - 'http://ngl-dual-603.symbolblockchain.io:3000' + - 'http://ngl-dual-604.symbolblockchain.io:3000' + - 'http://ngl-dual-005.symbolblockchain.io:3000' + - 'http://ngl-dual-006.symbolblockchain.io:3000' + - 'http://ngl-dual-105.symbolblockchain.io:3000' + - 'http://ngl-dual-106.symbolblockchain.io:3000' + - 'http://ngl-dual-205.symbolblockchain.io:3000' + - 'http://ngl-dual-206.symbolblockchain.io:3000' + - 'http://ngl-dual-305.symbolblockchain.io:3000' + - 'http://ngl-dual-306.symbolblockchain.io:3000' + - 'http://ngl-dual-405.symbolblockchain.io:3000' + - 'http://ngl-dual-406.symbolblockchain.io:3000' + - 'http://ngl-dual-505.symbolblockchain.io:3000' + - 'http://ngl-dual-506.symbolblockchain.io:3000' + - 'http://ngl-dual-605.symbolblockchain.io:3000' + - 'http://ngl-dual-606.symbolblockchain.io:3000' + - 'http://ngl-api-001.symbolblockchain.io:3000' + - 'http://ngl-api-301.symbolblockchain.io:3000' + - 'http://ngl-api-401.symbolblockchain.io:3000' + - 'http://ngl-api-501.symbolblockchain.io:3000' + - 'http://ngl-api-601.symbolblockchain.io:3000' +knownPeers: + api-node: + - + publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - + publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - + publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - + publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - + publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - + publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - + publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - + publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - + publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - + publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - + publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - + publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - + publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - + publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - + publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - + publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - + publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - + publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - + publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - + publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - + publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - + publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - + publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - + publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - + publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - + publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - + publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - + publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - + publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - + publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - + publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - + publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - + publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - + publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - + publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - + publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - + publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - + publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - + publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - + publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - + publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - + publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api + peer-node: + - + publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - + publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - + publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - + publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - + publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - + publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - + publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - + publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - + publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - + publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - + publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - + publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - + publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - + publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - + publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - + publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - + publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - + publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - + publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - + publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - + publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - + publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - + publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - + publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - + publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - + publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - + publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - + publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - + publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - + publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - + publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - + publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - + publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - + publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - + publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - + publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - + publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - + publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - + publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - + publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - + publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - + publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - + publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - + publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - + publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +faucetUrl: 'http://localhost:100' +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + host: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +wallets: + - + name: wallet + title: Symbol Bootstrap Wallet + openPort: '80' +explorers: + - + name: explorer + openPort: '90' + footer: + link: + - + href: 'https://nemflash.io/' + text: NEM News + icon: IconNewspaper + - + href: 'https://forum.nem.io/' + text: Forum + icon: IconForum + - + href: 'https://t.me/nemred' + text: Telegram + icon: IconTelegram + - + href: 'https://www.reddit.com/r/nem/' + text: Reddit + icon: IconReddit + - + href: 'https://github.com/nemtech' + text: Github + icon: IconGithub + - + href: 'http://localhost:100/' + text: Faucet + icon: IconHomeCurrencyUsd +faucets: + - + name: faucet + gateway: rest-gateway + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + openPort: '100' +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: mainnet +assembly: demo +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} +networkIdentifier: public +networkName: public diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/reports/node-config.csv new file mode 100644 index 000000000..5da6459cb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; +epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; node; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/reports/node-config.rst new file mode 100644 index 000000000..032607922 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; + epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; node; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/app.conf.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/app.conf.js new file mode 100644 index 000000000..6277c735e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/app.conf.js @@ -0,0 +1,23 @@ +var appConfig = { + title: 'Symbol Bootstrap Wallet', + constants: { + EVENTS_THROTTLING_TIME: 6000, + MAX_LISTENER_RECONNECT_TRIES: 20, + MAX_PASSWORD_LENGTH: 64, + MAX_REMOTE_ACCOUNT_CHECKS: 10, + MAX_SEED_ACCOUNTS_NUMBER: 10, + MIN_PASSWORD_LENGTH: 8, + SEED_ACCOUNT_NAME_PREFIX: 'SeedWallet-', + ANNOUNCE_TRANSACTION_TIMEOUT: 240000, + DECIMAL_SEPARATOR: Number('1.1').toLocaleString().substring(1, 2), + }, + languages: [ + { value: 'en-US', label: 'English' }, + { value: 'zh-CN', label: '中文' }, + { value: 'ja-JP', label: '日本語' }, + ], + marketServerUrl: 'http://app.nemcn.io', + articlesFeedUrl: 'http://rssmix.com/u/11801188/rss.xml', +} +window.appConfig = appConfig +console.log('appConfig loaded!', appConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/fees.conf.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/fees.conf.js new file mode 100644 index 000000000..1a40c3f28 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/fees.conf.js @@ -0,0 +1,9 @@ +var feesConfig = { + median: 10, + free: 0, + slow: 5, + slowest: 1, + fast: 20, +} +window.feesConfig = feesConfig +console.log('feesConfig loaded!', feesConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/network.conf.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/network.conf.js new file mode 100644 index 000000000..889ce6069 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/network.conf.js @@ -0,0 +1,84 @@ +var networkTypeConfig = { + "explorerUrl": "", + "faucetUrl": "http://localhost:100", + "defaultNetworkType": 104, + "defaultNodeUrl": "http://node:3000", + "networkConfigurationDefaults": { + "maxMosaicDivisibility": 6, + "namespaceGracePeriodDuration": 2592000, + "lockedFundsPerAggregate": "10000000", + "maxCosignatoriesPerAccount": 25, + "blockGenerationTargetTime": 30, + "maxNamespaceDepth": 3, + "maxMosaicDuration": 315360000, + "minNamespaceDuration": 2592000, + "maxNamespaceDuration": 157680000, + "maxTransactionsPerAggregate": 100, + "maxCosignedAccountsPerAccount": 25, + "maxMessageSize": 1024, + "maxMosaicAtomicUnits": 8999999999000000, + "currencyMosaicId": "6BED913FA20223F8", + "harvestingMosaicId": "6BED913FA20223F8", + "defaultDynamicFeeMultiplier": 100, + "epochAdjustment": 1615853185, + "totalChainImportance": 7842928625000000, + "generationHash": "57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6" + }, + "nodes": [ + {"friendlyName": "node", "roles": 2, "url": "http://node:3000"}, + {"friendlyName": "ngl-dual-001.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-001.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-002.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-002.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-003.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-003.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-004.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-004.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-101.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-101.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-102.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-102.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-103.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-103.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-104.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-104.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-201.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-201.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-202.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-202.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-203.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-203.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-204.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-204.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-301.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-301.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-302.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-302.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-303.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-303.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-304.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-304.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-401.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-401.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-402.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-402.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-403.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-403.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-404.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-404.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-501.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-501.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-502.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-502.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-503.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-503.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-504.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-504.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-601.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-601.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-602.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-602.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-603.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-603.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-604.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-604.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-005.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-005.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-006.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-006.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-105.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-105.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-106.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-106.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-205.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-205.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-206.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-206.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-305.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-305.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-306.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-306.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-405.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-405.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-406.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-406.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-505.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-505.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-506.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-506.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-605.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-605.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-606.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-606.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-api-001.symbolblockchain.io", "roles": 2, "url": "http://ngl-api-001.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-api-301.symbolblockchain.io", "roles": 2, "url": "http://ngl-api-301.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-api-401.symbolblockchain.io", "roles": 2, "url": "http://ngl-api-401.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-api-501.symbolblockchain.io", "roles": 2, "url": "http://ngl-api-501.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-api-601.symbolblockchain.io", "roles": 2, "url": "http://ngl-api-601.symbolblockchain.io:3000"}, + ] +} +var networkConfig = { 104 : networkTypeConfig } +window.networkConfig = networkConfig +console.log('networkConfig loaded!', networkConfig) + + + + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/profileImporter.html b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/profileImporter.html new file mode 100644 index 000000000..bd0ee1add --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-target/wallets/wallet/profileImporter.html @@ -0,0 +1,140 @@ + + + + + + Profile Importer + + + +

Profile Importer File Form

+ + +
+
+
+ + +
+ +

Profile Importer Text Form

+
+
+ +
+
+ Go back to the wallet + + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/addresses.yml new file mode 100644 index 000000000..c213218b5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/addresses.yml @@ -0,0 +1,29 @@ +version: 2 +networkType: 104 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +nodes: + - + name: node + friendlyName: myRegularNode + roles: 'Peer,Api,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: NBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TYKV3Q + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: NDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPRBXQQ + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: NDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4B26GQI + voting: + - + publicKey: 699B5C153608E1C1980EFA5B982411AD73AD66F72B46F979C84E4684A66E7AE3 + startEpoch: 224 + endEpoch: 583 + filename: private_key_tree1.dat diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/docker-compose.yml new file mode 100644 index 000000000..b2d939a54 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/docker-compose.yml @@ -0,0 +1,117 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - myRegularNode.host.com + hostname: myRegularNode.host.com + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 + wallet: + container_name: wallet + image: 'symbolplatform/symbol-desktop-wallet:1.0.1' + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '80:80' + restart: 'on-failure:2' + volumes: + - '../wallets/wallet:/usr/share/nginx/html/config:ro' + explorer: + container_name: explorer + image: 'symbolplatform/symbol-explorer:1.1.0-alpha' + entrypoint: ash -c "/bin/ash /symbol-commands/run.sh explorer" + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '90:4000' + restart: 'on-failure:2' + volumes: + - '../explorers/explorer:/symbol-workdir:ro' + - './explorer:/symbol-commands:ro' + faucet: + container_name: faucet + image: 'symbolplatform/symbol-faucet:1.0.1-alpha' + stop_signal: SIGINT + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + NATIVE_CURRENCY_NAME: symbol.xym + FAUCET_PRIVATE_KEY: '' + NATIVE_CURRENCY_ID: 6BED913FA20223F8 + restart: 'on-failure:2' + ports: + - '100:4000' + depends_on: + - rest-gateway +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/explorers/explorer/default.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/explorers/explorer/default.json new file mode 100644 index 000000000..3513956eb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/explorers/explorer/default.json @@ -0,0 +1,99 @@ +{ + "peersApi": { + "defaultNode": "http://myRegularNode.host.com:3000", + "nodes": [ + "http://myRegularNode.host.com:3000", + "http://ngl-dual-001.symbolblockchain.io:3000", + "http://ngl-dual-002.symbolblockchain.io:3000", + "http://ngl-dual-003.symbolblockchain.io:3000", + "http://ngl-dual-004.symbolblockchain.io:3000", + "http://ngl-dual-101.symbolblockchain.io:3000", + "http://ngl-dual-102.symbolblockchain.io:3000", + "http://ngl-dual-103.symbolblockchain.io:3000", + "http://ngl-dual-104.symbolblockchain.io:3000", + "http://ngl-dual-201.symbolblockchain.io:3000", + "http://ngl-dual-202.symbolblockchain.io:3000", + "http://ngl-dual-203.symbolblockchain.io:3000", + "http://ngl-dual-204.symbolblockchain.io:3000", + "http://ngl-dual-301.symbolblockchain.io:3000", + "http://ngl-dual-302.symbolblockchain.io:3000", + "http://ngl-dual-303.symbolblockchain.io:3000", + "http://ngl-dual-304.symbolblockchain.io:3000", + "http://ngl-dual-401.symbolblockchain.io:3000", + "http://ngl-dual-402.symbolblockchain.io:3000", + "http://ngl-dual-403.symbolblockchain.io:3000", + "http://ngl-dual-404.symbolblockchain.io:3000", + "http://ngl-dual-501.symbolblockchain.io:3000", + "http://ngl-dual-502.symbolblockchain.io:3000", + "http://ngl-dual-503.symbolblockchain.io:3000", + "http://ngl-dual-504.symbolblockchain.io:3000", + "http://ngl-dual-601.symbolblockchain.io:3000", + "http://ngl-dual-602.symbolblockchain.io:3000", + "http://ngl-dual-603.symbolblockchain.io:3000", + "http://ngl-dual-604.symbolblockchain.io:3000", + "http://ngl-dual-005.symbolblockchain.io:3000", + "http://ngl-dual-006.symbolblockchain.io:3000", + "http://ngl-dual-105.symbolblockchain.io:3000", + "http://ngl-dual-106.symbolblockchain.io:3000", + "http://ngl-dual-205.symbolblockchain.io:3000", + "http://ngl-dual-206.symbolblockchain.io:3000", + "http://ngl-dual-305.symbolblockchain.io:3000", + "http://ngl-dual-306.symbolblockchain.io:3000", + "http://ngl-dual-405.symbolblockchain.io:3000", + "http://ngl-dual-406.symbolblockchain.io:3000", + "http://ngl-dual-505.symbolblockchain.io:3000", + "http://ngl-dual-506.symbolblockchain.io:3000", + "http://ngl-dual-605.symbolblockchain.io:3000", + "http://ngl-dual-606.symbolblockchain.io:3000", + "http://ngl-api-001.symbolblockchain.io:3000", + "http://ngl-api-301.symbolblockchain.io:3000", + "http://ngl-api-401.symbolblockchain.io:3000", + "http://ngl-api-501.symbolblockchain.io:3000", + "http://ngl-api-601.symbolblockchain.io:3000" + ] + }, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "symbol.xym", + "mosaicId": "6BED913FA20223F8", + "divisibility": "6", + "namespaceId": "E74B99BA41F4AFEE", + "networkIdentifier": 104 + }, + "footer": { + "link": [ + { + "href": "https://nemflash.io/", + "text": "NEM News", + "icon": "IconNewspaper" + }, + { + "href": "https://forum.nem.io/", + "text": "Forum", + "icon": "IconForum" + }, + { + "href": "https://t.me/nemred", + "text": "Telegram", + "icon": "IconTelegram" + }, + { + "href": "https://www.reddit.com/r/nem/", + "text": "Reddit", + "icon": "IconReddit" + }, + { + "href": "https://github.com/nemtech", + "text": "Github", + "icon": "IconGithub" + }, + { + "href": "http://localhost:100/", + "text": "Faucet", + "icon": "IconHomeCurrencyUsd" + } + ] + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..91880f38e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQtS1hyPjq51VWhrivceEBKiddrZjAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzM1oXDTQxMDcwMTE3MjMzM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAP4MRm1ZcuKjC0KLVWFKAsOIQ8MsH +ufTYh30VMySBegEqRepQwlmy96e7Oy03GozzvIaGob0+AXVpKxlTX0XsDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..02adc9fb6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAjY6at/NZ3zDm7I/JZ4hRLlHM7TAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzM1oXDTIyMDcxNjE3MjMzM1owDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBACY81JMkfkBQv5non27fnuWeAT9U5pU2P96ZEJ4j +7qrF5To78rvyetrgT8uZeWTZM1Z1nXu7aXufM6qWlnhsyAc= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..440c913ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "public", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..5301f739e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6bb65803d Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..8ef9324a5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..645a1b893 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..7b6255440 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..91880f38e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQtS1hyPjq51VWhrivceEBKiddrZjAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzM1oXDTQxMDcwMTE3MjMzM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAP4MRm1ZcuKjC0KLVWFKAsOIQ8MsH +ufTYh30VMySBegEqRepQwlmy96e7Oy03GozzvIaGob0+AXVpKxlTX0XsDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..02adc9fb6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAjY6at/NZ3zDm7I/JZ4hRLlHM7TAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzM1oXDTIyMDcxNjE3MjMzM1owDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBACY81JMkfkBQv5non27fnuWeAT9U5pU2P96ZEJ4j +7qrF5To78rvyetrgT8uZeWTZM1Z1nXu7aXufM6qWlnhsyAc= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..f84adb347 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAjY6at/NZ3zDm7I/JZ4hRLlHM7TAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzM1oXDTIyMDcxNjE3MjMzM1owDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBACY81JMkfkBQv5non27fnuWeAT9U5pU2P96ZEJ4j +7qrF5To78rvyetrgT8uZeWTZM1Z1nXu7aXufM6qWlnhsyAc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQtS1hyPjq51VWhrivceEBKiddrZjAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzM1oXDTQxMDcwMTE3MjMzM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAP4MRm1ZcuKjC0KLVWFKAsOIQ8MsH +ufTYh30VMySBegEqRepQwlmy96e7Oy03GozzvIaGob0+AXVpKxlTX0XsDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..223ff4bc4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/nodes/node/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/preset.yml new file mode 100644 index 000000000..417bfc56c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/preset.yml @@ -0,0 +1,1600 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1615853185s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: Symbol Mainnet +baseNamespace: symbol +currencyMosaicId: 6BED913FA20223F8 +harvestingMosaicId: 6BED913FA20223F8 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +harvestNetworkFeeSinkAddress: NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI +namespaceRentalFeeSinkAddress: NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +mosaicRentalFeeSinkAddress: NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +nemesisSignerPublicKey: BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +networkType: 104 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: NDG2F6IHON7EDOXZCHSTSJ2YMUHDFXAQ2EUZHFA +rewardProgramControllerApiUrl: 'http://node-monitoring.symbolblockchain.io:7890' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 224 +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-001.symbolblockchain.io:3000' + - 'http://ngl-dual-002.symbolblockchain.io:3000' + - 'http://ngl-dual-003.symbolblockchain.io:3000' + - 'http://ngl-dual-004.symbolblockchain.io:3000' + - 'http://ngl-dual-101.symbolblockchain.io:3000' + - 'http://ngl-dual-102.symbolblockchain.io:3000' + - 'http://ngl-dual-103.symbolblockchain.io:3000' + - 'http://ngl-dual-104.symbolblockchain.io:3000' + - 'http://ngl-dual-201.symbolblockchain.io:3000' + - 'http://ngl-dual-202.symbolblockchain.io:3000' + - 'http://ngl-dual-203.symbolblockchain.io:3000' + - 'http://ngl-dual-204.symbolblockchain.io:3000' + - 'http://ngl-dual-301.symbolblockchain.io:3000' + - 'http://ngl-dual-302.symbolblockchain.io:3000' + - 'http://ngl-dual-303.symbolblockchain.io:3000' + - 'http://ngl-dual-304.symbolblockchain.io:3000' + - 'http://ngl-dual-401.symbolblockchain.io:3000' + - 'http://ngl-dual-402.symbolblockchain.io:3000' + - 'http://ngl-dual-403.symbolblockchain.io:3000' + - 'http://ngl-dual-404.symbolblockchain.io:3000' + - 'http://ngl-dual-501.symbolblockchain.io:3000' + - 'http://ngl-dual-502.symbolblockchain.io:3000' + - 'http://ngl-dual-503.symbolblockchain.io:3000' + - 'http://ngl-dual-504.symbolblockchain.io:3000' + - 'http://ngl-dual-601.symbolblockchain.io:3000' + - 'http://ngl-dual-602.symbolblockchain.io:3000' + - 'http://ngl-dual-603.symbolblockchain.io:3000' + - 'http://ngl-dual-604.symbolblockchain.io:3000' + - 'http://ngl-dual-005.symbolblockchain.io:3000' + - 'http://ngl-dual-006.symbolblockchain.io:3000' + - 'http://ngl-dual-105.symbolblockchain.io:3000' + - 'http://ngl-dual-106.symbolblockchain.io:3000' + - 'http://ngl-dual-205.symbolblockchain.io:3000' + - 'http://ngl-dual-206.symbolblockchain.io:3000' + - 'http://ngl-dual-305.symbolblockchain.io:3000' + - 'http://ngl-dual-306.symbolblockchain.io:3000' + - 'http://ngl-dual-405.symbolblockchain.io:3000' + - 'http://ngl-dual-406.symbolblockchain.io:3000' + - 'http://ngl-dual-505.symbolblockchain.io:3000' + - 'http://ngl-dual-506.symbolblockchain.io:3000' + - 'http://ngl-dual-605.symbolblockchain.io:3000' + - 'http://ngl-dual-606.symbolblockchain.io:3000' + - 'http://ngl-api-001.symbolblockchain.io:3000' + - 'http://ngl-api-301.symbolblockchain.io:3000' + - 'http://ngl-api-401.symbolblockchain.io:3000' + - 'http://ngl-api-501.symbolblockchain.io:3000' + - 'http://ngl-api-601.symbolblockchain.io:3000' +knownPeers: + api-node: + - + publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - + publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - + publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - + publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - + publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - + publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - + publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - + publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - + publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - + publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - + publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - + publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - + publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - + publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - + publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - + publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - + publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - + publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - + publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - + publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - + publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - + publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - + publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - + publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - + publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - + publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - + publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - + publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - + publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - + publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - + publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - + publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - + publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - + publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - + publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - + publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - + publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - + publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - + publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - + publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - + publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - + publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api + peer-node: + - + publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - + publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - + publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - + publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - + publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - + publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - + publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - + publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - + publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - + publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - + publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - + publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - + publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - + publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - + publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - + publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - + publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - + publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - + publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - + publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - + publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - + publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - + publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - + publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - + publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - + publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - + publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - + publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - + publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - + publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - + publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - + publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - + publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - + publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - + publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - + publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - + publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - + publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - + publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - + publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - + publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - + publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - + publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - + publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - + publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +faucetUrl: 'http://localhost:100' +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + host: myRegularNode.host.com + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' + friendlyName: myRegularNode + voting: true +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +wallets: + - + name: wallet + title: Symbol Bootstrap Wallet + openPort: '80' +explorers: + - + name: explorer + openPort: '90' + footer: + link: + - + href: 'https://nemflash.io/' + text: NEM News + icon: IconNewspaper + - + href: 'https://forum.nem.io/' + text: Forum + icon: IconForum + - + href: 'https://t.me/nemred' + text: Telegram + icon: IconTelegram + - + href: 'https://www.reddit.com/r/nem/' + text: Reddit + icon: IconReddit + - + href: 'https://github.com/nemtech' + text: Github + icon: IconGithub + - + href: 'http://localhost:100/' + text: Faucet + icon: IconHomeCurrencyUsd +faucets: + - + name: faucet + gateway: rest-gateway + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + openPort: '100' +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: mainnet +assembly: demo +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - + friendlyName: myRegularNode + host: myRegularNode.host.com + voting: true +networkIdentifier: public +networkName: public diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/reports/node-config.csv new file mode 100644 index 000000000..ad2615100 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; +epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). +friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/reports/node-config.rst new file mode 100644 index 000000000..0d5b13470 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; + epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). + friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/app.conf.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/app.conf.js new file mode 100644 index 000000000..6277c735e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/app.conf.js @@ -0,0 +1,23 @@ +var appConfig = { + title: 'Symbol Bootstrap Wallet', + constants: { + EVENTS_THROTTLING_TIME: 6000, + MAX_LISTENER_RECONNECT_TRIES: 20, + MAX_PASSWORD_LENGTH: 64, + MAX_REMOTE_ACCOUNT_CHECKS: 10, + MAX_SEED_ACCOUNTS_NUMBER: 10, + MIN_PASSWORD_LENGTH: 8, + SEED_ACCOUNT_NAME_PREFIX: 'SeedWallet-', + ANNOUNCE_TRANSACTION_TIMEOUT: 240000, + DECIMAL_SEPARATOR: Number('1.1').toLocaleString().substring(1, 2), + }, + languages: [ + { value: 'en-US', label: 'English' }, + { value: 'zh-CN', label: '中文' }, + { value: 'ja-JP', label: '日本語' }, + ], + marketServerUrl: 'http://app.nemcn.io', + articlesFeedUrl: 'http://rssmix.com/u/11801188/rss.xml', +} +window.appConfig = appConfig +console.log('appConfig loaded!', appConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/fees.conf.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/fees.conf.js new file mode 100644 index 000000000..1a40c3f28 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/fees.conf.js @@ -0,0 +1,9 @@ +var feesConfig = { + median: 10, + free: 0, + slow: 5, + slowest: 1, + fast: 20, +} +window.feesConfig = feesConfig +console.log('feesConfig loaded!', feesConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/network.conf.js b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/network.conf.js new file mode 100644 index 000000000..ad7c7fef8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/network.conf.js @@ -0,0 +1,84 @@ +var networkTypeConfig = { + "explorerUrl": "", + "faucetUrl": "http://localhost:100", + "defaultNetworkType": 104, + "defaultNodeUrl": "http://myRegularNode.host.com:3000", + "networkConfigurationDefaults": { + "maxMosaicDivisibility": 6, + "namespaceGracePeriodDuration": 2592000, + "lockedFundsPerAggregate": "10000000", + "maxCosignatoriesPerAccount": 25, + "blockGenerationTargetTime": 30, + "maxNamespaceDepth": 3, + "maxMosaicDuration": 315360000, + "minNamespaceDuration": 2592000, + "maxNamespaceDuration": 157680000, + "maxTransactionsPerAggregate": 100, + "maxCosignedAccountsPerAccount": 25, + "maxMessageSize": 1024, + "maxMosaicAtomicUnits": 8999999999000000, + "currencyMosaicId": "6BED913FA20223F8", + "harvestingMosaicId": "6BED913FA20223F8", + "defaultDynamicFeeMultiplier": 100, + "epochAdjustment": 1615853185, + "totalChainImportance": 7842928625000000, + "generationHash": "57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6" + }, + "nodes": [ + {"friendlyName": "myregularnode.host.com", "roles": 2, "url": "http://myRegularNode.host.com:3000"}, + {"friendlyName": "ngl-dual-001.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-001.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-002.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-002.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-003.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-003.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-004.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-004.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-101.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-101.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-102.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-102.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-103.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-103.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-104.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-104.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-201.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-201.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-202.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-202.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-203.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-203.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-204.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-204.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-301.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-301.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-302.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-302.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-303.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-303.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-304.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-304.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-401.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-401.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-402.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-402.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-403.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-403.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-404.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-404.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-501.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-501.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-502.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-502.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-503.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-503.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-504.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-504.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-601.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-601.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-602.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-602.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-603.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-603.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-604.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-604.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-005.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-005.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-006.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-006.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-105.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-105.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-106.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-106.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-205.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-205.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-206.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-206.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-305.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-305.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-306.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-306.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-405.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-405.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-406.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-406.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-505.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-505.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-506.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-506.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-605.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-605.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-dual-606.symbolblockchain.io", "roles": 2, "url": "http://ngl-dual-606.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-api-001.symbolblockchain.io", "roles": 2, "url": "http://ngl-api-001.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-api-301.symbolblockchain.io", "roles": 2, "url": "http://ngl-api-301.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-api-401.symbolblockchain.io", "roles": 2, "url": "http://ngl-api-401.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-api-501.symbolblockchain.io", "roles": 2, "url": "http://ngl-api-501.symbolblockchain.io:3000"}, + {"friendlyName": "ngl-api-601.symbolblockchain.io", "roles": 2, "url": "http://ngl-api-601.symbolblockchain.io:3000"}, + ] +} +var networkConfig = { 104 : networkTypeConfig } +window.networkConfig = networkConfig +console.log('networkConfig loaded!', networkConfig) + + + + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/profileImporter.html b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/profileImporter.html new file mode 100644 index 000000000..bd0ee1add --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-demo-voting-target/wallets/wallet/profileImporter.html @@ -0,0 +1,140 @@ + + + + + + Profile Importer + + + +

Profile Importer File Form

+ + +
+
+
+ + +
+ +

Profile Importer Text Form

+
+
+ +
+
+ Go back to the wallet + + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/addresses.yml new file mode 100644 index 000000000..d9651c620 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/addresses.yml @@ -0,0 +1,33 @@ +version: 2 +networkType: 104 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +nodes: + - + name: node + friendlyName: mySupernode + roles: 'Peer,Api,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: NBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TYKV3Q + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: NDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPRBXQQ + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: NDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4B26GQI + agent: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA5 + publicKey: 320F30C51494F9F2F0A3407CC2673D1AE60DDB7AEC1AE8388336A4C04EA17CBE + address: NBJ3YVBWB5PBTRBXLYDKZGITMNEYBLZSWLUV3NA + voting: + - + publicKey: 699B5C153608E1C1980EFA5B982411AD73AD66F72B46F979C84E4684A66E7AE3 + startEpoch: 224 + endEpoch: 583 + filename: private_key_tree1.dat diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/docker-compose.yml new file mode 100644 index 000000000..79ec71be9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/docker-compose.yml @@ -0,0 +1,85 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - mySupernode.host.com + hostname: mySupernode.host.com + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + node-agent: + user: '1000:1000' + container_name: node-agent + image: 'symbolplatform/symbol-node-rewards-agent:2.0.0' + working_dir: /symbol-workdir + entrypoint: /app/agent-linux.bin --config agent.properties + ports: + - '7881:7881' + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node/agent:/symbol-workdir:rw' + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..a7f741937 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRmgzoG9+H/meuZ6iYPwWnczxm10jAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM0NloXDTQxMDcwMTE3MjM0NlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EASQdsRgd8+fPa6KAFPTFPSjJRCE3s +DmJtURpaaXphlGaSzRbCxSPY6u2uG8q2P7Q2feguHnWX7rDOOvcenoHVAQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..b37b6160f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMOXRXMNnFNDE6pntGXgHJw6PAvMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzQ2WhcNMjIwNzE2MTcyMzQ2WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EA6cIGDlbZhwPq8WAYi+ctYVF2GYS5Ra2ayXoDi5m2 +h1BFw4xf5cX6ADzKoo586meeAxWAfQ61cDmv8B6XiBk2DQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..f89340277 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = mySupernode.host.com +friendlyName = mySupernode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..440c913ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "public", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..5301f739e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6bb65803d Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..8ef9324a5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..645a1b893 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..7b6255440 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.cnf new file mode 100644 index 000000000..453557283 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.cnf @@ -0,0 +1,20 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat +private_key = agent-ca.key.pem +certificate = agent-ca.crt.pem +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = Agent CA diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.csr.pem new file mode 100644 index 000000000..53d95ca95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGSMEYCAQAwEzERMA8GA1UEAwwIQWdlbnQgQ0EwKjAFBgMrZXADIQAyDzDFFJT5 +8vCjQHzCZz0a5g3beuwa6DiDNqTATqF8vqAAMAUGAytlcANBACZUAUp75EDHvFRB +nAHp4Z2TwZiG96viE+9RMt/lU4zG/4jREDRj03iz/cb2rWi9QMU7MsfI9prVNJOC +paE7awg= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.key.pem new file mode 100644 index 000000000..6eac3f041 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqql +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.pubkey.pem new file mode 100644 index 000000000..414351d3a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAMg8wxRSU+fLwo0B8wmc9GuYN23rsGug4gzakwE6hfL4= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-comm.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-comm.cnf new file mode 100644 index 000000000..766f8efbc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent-comm.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = Agent communication cert + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent.properties new file mode 100644 index 000000000..1c3c198a7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/agent.properties @@ -0,0 +1,8 @@ +CERTS_CONTROLLER_CA_CERT_FILE=LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +CONTROLLER_API_URL=http://node-monitoring.symbolblockchain.io:7890 +REST_GATEWAY_URL=http://mySupernode.host.com:3000 +REWARD_PROGRAM=SuperNode +MAIN_PUBLIC_KEY=7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 +LOGGER_FILE=logs/agent.log +CERTS_AGENT_CA_KEY_FILE=agent-ca.key.pem +CERTS_AGENT_CA_CERT_FILE=agent-ca.csr.pem diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/metadata.yml new file mode 100644 index 000000000..a43e4a184 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/agent/metadata.yml @@ -0,0 +1,2 @@ +version: 1 +agentPublicKey: 320F30C51494F9F2F0A3407CC2673D1AE60DDB7AEC1AE8388336A4C04EA17CBE diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..f89340277 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = mySupernode.host.com +friendlyName = mySupernode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..a7f741937 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRmgzoG9+H/meuZ6iYPwWnczxm10jAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM0NloXDTQxMDcwMTE3MjM0NlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EASQdsRgd8+fPa6KAFPTFPSjJRCE3s +DmJtURpaaXphlGaSzRbCxSPY6u2uG8q2P7Q2feguHnWX7rDOOvcenoHVAQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..b37b6160f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMOXRXMNnFNDE6pntGXgHJw6PAvMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzQ2WhcNMjIwNzE2MTcyMzQ2WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EA6cIGDlbZhwPq8WAYi+ctYVF2GYS5Ra2ayXoDi5m2 +h1BFw4xf5cX6ADzKoo586meeAxWAfQ61cDmv8B6XiBk2DQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..9d75f43d1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMOXRXMNnFNDE6pntGXgHJw6PAvMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzQ2WhcNMjIwNzE2MTcyMzQ2WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EA6cIGDlbZhwPq8WAYi+ctYVF2GYS5Ra2ayXoDi5m2 +h1BFw4xf5cX6ADzKoo586meeAxWAfQ61cDmv8B6XiBk2DQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRmgzoG9+H/meuZ6iYPwWnczxm10jAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM0NloXDTQxMDcwMTE3MjM0NlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EASQdsRgd8+fPa6KAFPTFPSjJRCE3s +DmJtURpaaXphlGaSzRbCxSPY6u2uG8q2P7Q2feguHnWX7rDOOvcenoHVAQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..f89340277 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = mySupernode.host.com +friendlyName = mySupernode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..223ff4bc4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/nodes/node/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/preset.yml new file mode 100644 index 000000000..aec0e95af --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/preset.yml @@ -0,0 +1,1554 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1615853185s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: Symbol Mainnet +baseNamespace: symbol +currencyMosaicId: 6BED913FA20223F8 +harvestingMosaicId: 6BED913FA20223F8 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +harvestNetworkFeeSinkAddress: NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI +namespaceRentalFeeSinkAddress: NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +mosaicRentalFeeSinkAddress: NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +nemesisSignerPublicKey: BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +networkType: 104 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: NDG2F6IHON7EDOXZCHSTSJ2YMUHDFXAQ2EUZHFA +rewardProgramControllerApiUrl: 'http://node-monitoring.symbolblockchain.io:7890' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 224 +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-001.symbolblockchain.io:3000' + - 'http://ngl-dual-002.symbolblockchain.io:3000' + - 'http://ngl-dual-003.symbolblockchain.io:3000' + - 'http://ngl-dual-004.symbolblockchain.io:3000' + - 'http://ngl-dual-101.symbolblockchain.io:3000' + - 'http://ngl-dual-102.symbolblockchain.io:3000' + - 'http://ngl-dual-103.symbolblockchain.io:3000' + - 'http://ngl-dual-104.symbolblockchain.io:3000' + - 'http://ngl-dual-201.symbolblockchain.io:3000' + - 'http://ngl-dual-202.symbolblockchain.io:3000' + - 'http://ngl-dual-203.symbolblockchain.io:3000' + - 'http://ngl-dual-204.symbolblockchain.io:3000' + - 'http://ngl-dual-301.symbolblockchain.io:3000' + - 'http://ngl-dual-302.symbolblockchain.io:3000' + - 'http://ngl-dual-303.symbolblockchain.io:3000' + - 'http://ngl-dual-304.symbolblockchain.io:3000' + - 'http://ngl-dual-401.symbolblockchain.io:3000' + - 'http://ngl-dual-402.symbolblockchain.io:3000' + - 'http://ngl-dual-403.symbolblockchain.io:3000' + - 'http://ngl-dual-404.symbolblockchain.io:3000' + - 'http://ngl-dual-501.symbolblockchain.io:3000' + - 'http://ngl-dual-502.symbolblockchain.io:3000' + - 'http://ngl-dual-503.symbolblockchain.io:3000' + - 'http://ngl-dual-504.symbolblockchain.io:3000' + - 'http://ngl-dual-601.symbolblockchain.io:3000' + - 'http://ngl-dual-602.symbolblockchain.io:3000' + - 'http://ngl-dual-603.symbolblockchain.io:3000' + - 'http://ngl-dual-604.symbolblockchain.io:3000' + - 'http://ngl-dual-005.symbolblockchain.io:3000' + - 'http://ngl-dual-006.symbolblockchain.io:3000' + - 'http://ngl-dual-105.symbolblockchain.io:3000' + - 'http://ngl-dual-106.symbolblockchain.io:3000' + - 'http://ngl-dual-205.symbolblockchain.io:3000' + - 'http://ngl-dual-206.symbolblockchain.io:3000' + - 'http://ngl-dual-305.symbolblockchain.io:3000' + - 'http://ngl-dual-306.symbolblockchain.io:3000' + - 'http://ngl-dual-405.symbolblockchain.io:3000' + - 'http://ngl-dual-406.symbolblockchain.io:3000' + - 'http://ngl-dual-505.symbolblockchain.io:3000' + - 'http://ngl-dual-506.symbolblockchain.io:3000' + - 'http://ngl-dual-605.symbolblockchain.io:3000' + - 'http://ngl-dual-606.symbolblockchain.io:3000' + - 'http://ngl-api-001.symbolblockchain.io:3000' + - 'http://ngl-api-301.symbolblockchain.io:3000' + - 'http://ngl-api-401.symbolblockchain.io:3000' + - 'http://ngl-api-501.symbolblockchain.io:3000' + - 'http://ngl-api-601.symbolblockchain.io:3000' +knownPeers: + api-node: + - + publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - + publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - + publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - + publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - + publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - + publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - + publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - + publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - + publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - + publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - + publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - + publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - + publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - + publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - + publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - + publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - + publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - + publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - + publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - + publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - + publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - + publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - + publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - + publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - + publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - + publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - + publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - + publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - + publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - + publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - + publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - + publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - + publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - + publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - + publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - + publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - + publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - + publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - + publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - + publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - + publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - + publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api + peer-node: + - + publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - + publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - + publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - + publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - + publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - + publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - + publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - + publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - + publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - + publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - + publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - + publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - + publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - + publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - + publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - + publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - + publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - + publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - + publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - + publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - + publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - + publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - + publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - + publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - + publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - + publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - + publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - + publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - + publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - + publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - + publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - + publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - + publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - + publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - + publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - + publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - + publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - + publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - + publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - + publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - + publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - + publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - + publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - + publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - + publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' + friendlyName: mySupernode + host: mySupernode.host.com + voting: true + rewardProgram: SuperNode +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: mainnet +assembly: dual +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - + friendlyName: mySupernode + host: mySupernode.host.com + voting: true + rewardProgram: SuperNode +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public +networkName: public diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/reports/node-config.csv new file mode 100644 index 000000000..3dbe7583a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; +epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; mySupernode.host.com; string; Node host (leave empty to auto-detect IP). +friendlyName; mySupernode; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/reports/node-config.rst new file mode 100644 index 000000000..c121ffd52 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-supernode-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; + epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; mySupernode.host.com; string; Node host (leave empty to auto-detect IP). + friendlyName; mySupernode; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/addresses.yml new file mode 100644 index 000000000..4ca3736b4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/addresses.yml @@ -0,0 +1,23 @@ +version: 2 +networkType: 104 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: 'Peer,Api' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: NBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TYKV3Q + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: NDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPRBXQQ + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: NDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4B26GQI diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/docker-compose.yml new file mode 100644 index 000000000..486c0e258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/docker-compose.yml @@ -0,0 +1,68 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..084319acd --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRlb0TpLOFQ8EVuaLhppCDZi8tT2TAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyM1oXDTQxMDcwMTE3MjMyM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA0OgKlmRkjFsT32aR85CnlqfokAts +rq6zevIPujKPQGWxtD8oo6gBfCA4ZF46Y+Z0It1UXvPpGviOmxGOmAwwAQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..09e43d246 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAlNqvU0Pi+chbzrVHNfIjFJwooDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyM1oXDTIyMDcxNjE3MjMyM1owDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAN13pnPgGcPo2MZIFY9ILnec0kGI4ghV5ihrAyja +Ao5nHsziPDf66cWiA9ccb5ItAGnhI1U2HQMYVejMoOP/oAg= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..62198921a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..440c913ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "public", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..5301f739e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6bb65803d Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..8ef9324a5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..645a1b893 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..7b6255440 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..62198921a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..084319acd --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRlb0TpLOFQ8EVuaLhppCDZi8tT2TAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyM1oXDTQxMDcwMTE3MjMyM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA0OgKlmRkjFsT32aR85CnlqfokAts +rq6zevIPujKPQGWxtD8oo6gBfCA4ZF46Y+Z0It1UXvPpGviOmxGOmAwwAQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..09e43d246 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAlNqvU0Pi+chbzrVHNfIjFJwooDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyM1oXDTIyMDcxNjE3MjMyM1owDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAN13pnPgGcPo2MZIFY9ILnec0kGI4ghV5ihrAyja +Ao5nHsziPDf66cWiA9ccb5ItAGnhI1U2HQMYVejMoOP/oAg= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..368ace9a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAlNqvU0Pi+chbzrVHNfIjFJwooDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyM1oXDTIyMDcxNjE3MjMyM1owDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAN13pnPgGcPo2MZIFY9ILnec0kGI4ghV5ihrAyja +Ao5nHsziPDf66cWiA9ccb5ItAGnhI1U2HQMYVejMoOP/oAg= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRlb0TpLOFQ8EVuaLhppCDZi8tT2TAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyM1oXDTQxMDcwMTE3MjMyM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA0OgKlmRkjFsT32aR85CnlqfokAts +rq6zevIPujKPQGWxtD8oo6gBfCA4ZF46Y+Z0It1UXvPpGviOmxGOmAwwAQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..62198921a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/preset.yml new file mode 100644 index 000000000..06aa5cdce --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/preset.yml @@ -0,0 +1,1546 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1615853185s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: Symbol Mainnet +baseNamespace: symbol +currencyMosaicId: 6BED913FA20223F8 +harvestingMosaicId: 6BED913FA20223F8 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +harvestNetworkFeeSinkAddress: NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI +namespaceRentalFeeSinkAddress: NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +mosaicRentalFeeSinkAddress: NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +nemesisSignerPublicKey: BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +networkType: 104 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: NDG2F6IHON7EDOXZCHSTSJ2YMUHDFXAQ2EUZHFA +rewardProgramControllerApiUrl: 'http://node-monitoring.symbolblockchain.io:7890' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 224 +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-001.symbolblockchain.io:3000' + - 'http://ngl-dual-002.symbolblockchain.io:3000' + - 'http://ngl-dual-003.symbolblockchain.io:3000' + - 'http://ngl-dual-004.symbolblockchain.io:3000' + - 'http://ngl-dual-101.symbolblockchain.io:3000' + - 'http://ngl-dual-102.symbolblockchain.io:3000' + - 'http://ngl-dual-103.symbolblockchain.io:3000' + - 'http://ngl-dual-104.symbolblockchain.io:3000' + - 'http://ngl-dual-201.symbolblockchain.io:3000' + - 'http://ngl-dual-202.symbolblockchain.io:3000' + - 'http://ngl-dual-203.symbolblockchain.io:3000' + - 'http://ngl-dual-204.symbolblockchain.io:3000' + - 'http://ngl-dual-301.symbolblockchain.io:3000' + - 'http://ngl-dual-302.symbolblockchain.io:3000' + - 'http://ngl-dual-303.symbolblockchain.io:3000' + - 'http://ngl-dual-304.symbolblockchain.io:3000' + - 'http://ngl-dual-401.symbolblockchain.io:3000' + - 'http://ngl-dual-402.symbolblockchain.io:3000' + - 'http://ngl-dual-403.symbolblockchain.io:3000' + - 'http://ngl-dual-404.symbolblockchain.io:3000' + - 'http://ngl-dual-501.symbolblockchain.io:3000' + - 'http://ngl-dual-502.symbolblockchain.io:3000' + - 'http://ngl-dual-503.symbolblockchain.io:3000' + - 'http://ngl-dual-504.symbolblockchain.io:3000' + - 'http://ngl-dual-601.symbolblockchain.io:3000' + - 'http://ngl-dual-602.symbolblockchain.io:3000' + - 'http://ngl-dual-603.symbolblockchain.io:3000' + - 'http://ngl-dual-604.symbolblockchain.io:3000' + - 'http://ngl-dual-005.symbolblockchain.io:3000' + - 'http://ngl-dual-006.symbolblockchain.io:3000' + - 'http://ngl-dual-105.symbolblockchain.io:3000' + - 'http://ngl-dual-106.symbolblockchain.io:3000' + - 'http://ngl-dual-205.symbolblockchain.io:3000' + - 'http://ngl-dual-206.symbolblockchain.io:3000' + - 'http://ngl-dual-305.symbolblockchain.io:3000' + - 'http://ngl-dual-306.symbolblockchain.io:3000' + - 'http://ngl-dual-405.symbolblockchain.io:3000' + - 'http://ngl-dual-406.symbolblockchain.io:3000' + - 'http://ngl-dual-505.symbolblockchain.io:3000' + - 'http://ngl-dual-506.symbolblockchain.io:3000' + - 'http://ngl-dual-605.symbolblockchain.io:3000' + - 'http://ngl-dual-606.symbolblockchain.io:3000' + - 'http://ngl-api-001.symbolblockchain.io:3000' + - 'http://ngl-api-301.symbolblockchain.io:3000' + - 'http://ngl-api-401.symbolblockchain.io:3000' + - 'http://ngl-api-501.symbolblockchain.io:3000' + - 'http://ngl-api-601.symbolblockchain.io:3000' +knownPeers: + api-node: + - + publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - + publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - + publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - + publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - + publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - + publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - + publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - + publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - + publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - + publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - + publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - + publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - + publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - + publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - + publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - + publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - + publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - + publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - + publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - + publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - + publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - + publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - + publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - + publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - + publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - + publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - + publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - + publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - + publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - + publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - + publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - + publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - + publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - + publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - + publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - + publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - + publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - + publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - + publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - + publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - + publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - + publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api + peer-node: + - + publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - + publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - + publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - + publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - + publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - + publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - + publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - + publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - + publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - + publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - + publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - + publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - + publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - + publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - + publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - + publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - + publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - + publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - + publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - + publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - + publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - + publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - + publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - + publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - + publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - + publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - + publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - + publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - + publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - + publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - + publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - + publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - + publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - + publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - + publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - + publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - + publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - + publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - + publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - + publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - + publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - + publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - + publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - + publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - + publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: mainnet +assembly: dual +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public +networkName: public diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/reports/node-config.csv new file mode 100644 index 000000000..3b4071645 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; +epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/reports/node-config.rst new file mode 100644 index 000000000..ed18320f1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; + epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/addresses.yml new file mode 100644 index 000000000..c213218b5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/addresses.yml @@ -0,0 +1,29 @@ +version: 2 +networkType: 104 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +nodes: + - + name: node + friendlyName: myRegularNode + roles: 'Peer,Api,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: NBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TYKV3Q + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: NDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPRBXQQ + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: NDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4B26GQI + voting: + - + publicKey: 699B5C153608E1C1980EFA5B982411AD73AD66F72B46F979C84E4684A66E7AE3 + startEpoch: 224 + endEpoch: 583 + filename: private_key_tree1.dat diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/docker-compose.yml new file mode 100644 index 000000000..47307d71d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/docker-compose.yml @@ -0,0 +1,73 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - myRegularNode.host.com + hostname: myRegularNode.host.com + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..7820cd189 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQgvTXbKeNvz5OVu0DuhvAx3v8LDTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzMVoXDTQxMDcwMTE3MjMzMVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAztULao8+ESDfMh3kF0QeUyzSF+p8 +KnCau9964J02PIzy60gIWsDbunPHVoox+x1lb4ktqdkWF5tYIyw4tiRSAA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..1b7bfe7bb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQA4LMhacsxZnItF/9Y7TJWcN5BaTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzMVoXDTIyMDcxNjE3MjMzMVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAB9/0cdkEGeYk3acO+rRzGFD6oP5JBK8rKuHZ8MR +7pw+Op/VRzm82rMm/b/EluH7CgWXgmauFcoMsj+vWGyaWQc= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..440c913ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "public", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..5301f739e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6bb65803d Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..8ef9324a5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..645a1b893 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..7b6255440 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..7820cd189 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQgvTXbKeNvz5OVu0DuhvAx3v8LDTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzMVoXDTQxMDcwMTE3MjMzMVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAztULao8+ESDfMh3kF0QeUyzSF+p8 +KnCau9964J02PIzy60gIWsDbunPHVoox+x1lb4ktqdkWF5tYIyw4tiRSAA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..1b7bfe7bb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQA4LMhacsxZnItF/9Y7TJWcN5BaTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzMVoXDTIyMDcxNjE3MjMzMVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAB9/0cdkEGeYk3acO+rRzGFD6oP5JBK8rKuHZ8MR +7pw+Op/VRzm82rMm/b/EluH7CgWXgmauFcoMsj+vWGyaWQc= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..79653045a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQA4LMhacsxZnItF/9Y7TJWcN5BaTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzMVoXDTIyMDcxNjE3MjMzMVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAB9/0cdkEGeYk3acO+rRzGFD6oP5JBK8rKuHZ8MR +7pw+Op/VRzm82rMm/b/EluH7CgWXgmauFcoMsj+vWGyaWQc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQgvTXbKeNvz5OVu0DuhvAx3v8LDTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzMVoXDTQxMDcwMTE3MjMzMVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAztULao8+ESDfMh3kF0QeUyzSF+p8 +KnCau9964J02PIzy60gIWsDbunPHVoox+x1lb4ktqdkWF5tYIyw4tiRSAA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..223ff4bc4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/nodes/node/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/preset.yml new file mode 100644 index 000000000..79ac16a20 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/preset.yml @@ -0,0 +1,1552 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1615853185s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: Symbol Mainnet +baseNamespace: symbol +currencyMosaicId: 6BED913FA20223F8 +harvestingMosaicId: 6BED913FA20223F8 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +harvestNetworkFeeSinkAddress: NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI +namespaceRentalFeeSinkAddress: NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +mosaicRentalFeeSinkAddress: NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +nemesisSignerPublicKey: BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +networkType: 104 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: NDG2F6IHON7EDOXZCHSTSJ2YMUHDFXAQ2EUZHFA +rewardProgramControllerApiUrl: 'http://node-monitoring.symbolblockchain.io:7890' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 224 +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-001.symbolblockchain.io:3000' + - 'http://ngl-dual-002.symbolblockchain.io:3000' + - 'http://ngl-dual-003.symbolblockchain.io:3000' + - 'http://ngl-dual-004.symbolblockchain.io:3000' + - 'http://ngl-dual-101.symbolblockchain.io:3000' + - 'http://ngl-dual-102.symbolblockchain.io:3000' + - 'http://ngl-dual-103.symbolblockchain.io:3000' + - 'http://ngl-dual-104.symbolblockchain.io:3000' + - 'http://ngl-dual-201.symbolblockchain.io:3000' + - 'http://ngl-dual-202.symbolblockchain.io:3000' + - 'http://ngl-dual-203.symbolblockchain.io:3000' + - 'http://ngl-dual-204.symbolblockchain.io:3000' + - 'http://ngl-dual-301.symbolblockchain.io:3000' + - 'http://ngl-dual-302.symbolblockchain.io:3000' + - 'http://ngl-dual-303.symbolblockchain.io:3000' + - 'http://ngl-dual-304.symbolblockchain.io:3000' + - 'http://ngl-dual-401.symbolblockchain.io:3000' + - 'http://ngl-dual-402.symbolblockchain.io:3000' + - 'http://ngl-dual-403.symbolblockchain.io:3000' + - 'http://ngl-dual-404.symbolblockchain.io:3000' + - 'http://ngl-dual-501.symbolblockchain.io:3000' + - 'http://ngl-dual-502.symbolblockchain.io:3000' + - 'http://ngl-dual-503.symbolblockchain.io:3000' + - 'http://ngl-dual-504.symbolblockchain.io:3000' + - 'http://ngl-dual-601.symbolblockchain.io:3000' + - 'http://ngl-dual-602.symbolblockchain.io:3000' + - 'http://ngl-dual-603.symbolblockchain.io:3000' + - 'http://ngl-dual-604.symbolblockchain.io:3000' + - 'http://ngl-dual-005.symbolblockchain.io:3000' + - 'http://ngl-dual-006.symbolblockchain.io:3000' + - 'http://ngl-dual-105.symbolblockchain.io:3000' + - 'http://ngl-dual-106.symbolblockchain.io:3000' + - 'http://ngl-dual-205.symbolblockchain.io:3000' + - 'http://ngl-dual-206.symbolblockchain.io:3000' + - 'http://ngl-dual-305.symbolblockchain.io:3000' + - 'http://ngl-dual-306.symbolblockchain.io:3000' + - 'http://ngl-dual-405.symbolblockchain.io:3000' + - 'http://ngl-dual-406.symbolblockchain.io:3000' + - 'http://ngl-dual-505.symbolblockchain.io:3000' + - 'http://ngl-dual-506.symbolblockchain.io:3000' + - 'http://ngl-dual-605.symbolblockchain.io:3000' + - 'http://ngl-dual-606.symbolblockchain.io:3000' + - 'http://ngl-api-001.symbolblockchain.io:3000' + - 'http://ngl-api-301.symbolblockchain.io:3000' + - 'http://ngl-api-401.symbolblockchain.io:3000' + - 'http://ngl-api-501.symbolblockchain.io:3000' + - 'http://ngl-api-601.symbolblockchain.io:3000' +knownPeers: + api-node: + - + publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - + publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - + publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - + publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - + publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - + publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - + publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - + publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - + publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - + publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - + publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - + publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - + publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - + publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - + publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - + publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - + publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - + publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - + publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - + publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - + publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - + publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - + publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - + publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - + publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - + publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - + publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - + publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - + publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - + publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - + publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - + publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - + publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - + publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - + publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - + publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - + publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - + publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - + publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - + publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - + publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - + publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api + peer-node: + - + publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - + publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - + publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - + publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - + publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - + publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - + publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - + publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - + publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - + publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - + publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - + publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - + publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - + publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - + publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - + publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - + publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - + publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - + publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - + publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - + publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - + publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - + publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - + publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - + publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - + publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - + publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - + publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - + publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - + publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - + publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - + publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - + publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - + publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - + publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - + publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - + publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - + publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - + publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - + publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - + publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - + publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - + publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - + publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - + publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' + friendlyName: myRegularNode + host: myRegularNode.host.com + voting: true +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: mainnet +assembly: dual +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - + friendlyName: myRegularNode + host: myRegularNode.host.com + voting: true +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public +networkName: public diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/reports/node-config.csv new file mode 100644 index 000000000..ad2615100 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; +epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). +friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/reports/node-config.rst new file mode 100644 index 000000000..0d5b13470 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-dual-voting-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; + epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). + friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/addresses.yml new file mode 100644 index 000000000..9868f1963 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/addresses.yml @@ -0,0 +1,65 @@ +version: 2 +networkType: 104 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +nodes: + - + name: peer-node-0 + friendlyName: peer-node-0 + roles: 'Peer,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: NBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TYKV3Q + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: NDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPRBXQQ + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: NDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4B26GQI + voting: + - + publicKey: 675D847C23F181E8EA64A1DA926B99406C12155F630240622D26EBB9290A0B02 + startEpoch: 224 + endEpoch: 583 + filename: private_key_tree1.dat + - + name: peer-node-1 + friendlyName: peer-node-1 + roles: 'Peer,Voting' + main: + publicKey: F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8 + address: NCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KAVYGSQ + transport: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 404F4D08238867A2CBE61CB4D3AB5E6E8F69B6DBE80442025021F518B099BF8A + address: NAPMWPTZRETEQRNQ37UE72IAI4RHWXDH3A26O2Y + remote: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 3A6DF713A680D77EAF40BDD5DB1A701E52303BDC29314B9A0C00F17CF31B9AE4 + address: NCA7OHAAJTLWCIDAGOG4X5BTKBJRWMFLHHKP6OA + vrf: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: CF58C1A57E19B238B0D8DC1E74363C5BF399CF87251F4FF6A778B33946ADA34D + address: NC7B6MRPIOWQASLSHCXBKQ4ND4FH4TRGGZ5XCJY + voting: + - + publicKey: 8AC4BCEE773D4D0511AC0D26BBB99A6D22A69E8BC20398AA03EA16640B5042EA + startEpoch: 224 + endEpoch: 583 + filename: private_key_tree1.dat + - + name: api-node-0 + friendlyName: api-node-0 + roles: Api + main: + publicKey: 65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2 + address: NDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA227HYDY + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000BBBBB2 + publicKey: 051660FA2830C44E9DD2FD02A9E64A2878E013DEE5252B401D8B282D1C3A315D + address: NCNDEIWMTLC6R3KWMQOGHL7JMWGV5SYUTEJYHMA diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/docker-compose.yml new file mode 100644 index 000000000..9e7ee6b60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/docker-compose.yml @@ -0,0 +1,113 @@ +version: '2.4' +services: + db-0: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db-0 + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db-0 --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + ports: + - '27017:27017' + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db-0:/dbdata:rw' + peer-node-0: + user: '1000:1000' + container_name: peer-node-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-0 NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/peer-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - peer-node-0 + hostname: peer-node-0 + peer-node-1: + user: '1000:1000' + container_name: peer-node-1 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-1 NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7901:7900' + volumes: + - '../nodes/peer-node-1:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - peer-node-1 + hostname: peer-node-1 + api-node-0: + user: '1000:1000' + container_name: api-node-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-0 NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + volumes: + - '../nodes/api-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db-0 + - api-node-broker-0 + networks: + default: + aliases: + - api-node-0 + hostname: api-node-0 + api-node-broker-0: + user: '1000:1000' + container_name: api-node-broker-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-0 NORMAL + ports: + - '8002:7902' + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/api-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db-0 + rest-gateway-0: + container_name: rest-gateway-0 + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway-0:/symbol-workdir:rw' + depends_on: + - db-0 + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..260b83e11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH0MIGnAhRNOeUvJH7I3o5UuHD3NMEcNvtTmTAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMyNVoXDTQxMDcwMTE3MjMy +NVowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA3/CcwdVBsRjy +befN2rMved2ir6ATejvSm7d/UM1UGdg1Qzcf5gTR7PqRLHvEkzB3Q1Lp/6AGPdxi +PhxKC6tIBA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..a899e4314 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHsMIGfAhQApWy46EwmOpV/VIP8IgHfjkipJTAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMyNVoXDTIyMDcxNjE3MjMy +NVowFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPooMMROndL9 +AqnmSih44BPe5SUrQB2LKC0cOjFdMAUGAytlcANBAK+rsHsQGAfFUwsICAG/AxRu +HTf//bQDm39yth1zAX1F1EEpslcA6GzMxpxx6JR63e7DLuK0wMSuwcck/S6IVg0= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..f99b069e0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7uy +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties new file mode 100644 index 000000000..3eceaf784 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/rest.json b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/rest.json new file mode 100644 index 000000000..109e31485 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/gateways/rest-gateway-0/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "public", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db-0:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "api-node-0", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "api-node-broker-0", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..5301f739e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6bb65803d Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..8ef9324a5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..645a1b893 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..7b6255440 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties new file mode 100644 index 000000000..7f0e9b10f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db-0:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties new file mode 100644 index 000000000..3eceaf784 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..af1ad902c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json @@ -0,0 +1,610 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/ca.cert.pem new file mode 100644 index 000000000..260b83e11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH0MIGnAhRNOeUvJH7I3o5UuHD3NMEcNvtTmTAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMyNVoXDTQxMDcwMTE3MjMy +NVowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA3/CcwdVBsRjy +befN2rMved2ir6ATejvSm7d/UM1UGdg1Qzcf5gTR7PqRLHvEkzB3Q1Lp/6AGPdxi +PhxKC6tIBA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/ca.cnf new file mode 100644 index 000000000..1c97ff643 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = api-node-0-account diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem new file mode 100644 index 000000000..0cd8270a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAZceH1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9I= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/metadata.yml new file mode 100644 index 000000000..81846081b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 051660FA2830C44E9DD2FD02A9E64A2878E013DEE5252B401D8B282D1C3A315D +mainPublicKey: 65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.cnf new file mode 100644 index 000000000..04488fc2e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = api-node-0 + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.crt.pem new file mode 100644 index 000000000..a899e4314 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHsMIGfAhQApWy46EwmOpV/VIP8IgHfjkipJTAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMyNVoXDTIyMDcxNjE3MjMy +NVowFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPooMMROndL9 +AqnmSih44BPe5SUrQB2LKC0cOjFdMAUGAytlcANBAK+rsHsQGAfFUwsICAG/AxRu +HTf//bQDm39yth1zAX1F1EEpslcA6GzMxpxx6JR63e7DLuK0wMSuwcck/S6IVg0= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.csr.pem new file mode 100644 index 000000000..695c438fa --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGUMEgCAQAwFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPoo +MMROndL9AqnmSih44BPe5SUrQB2LKC0cOjFdoAAwBQYDK2VwA0EAnBJxE2GzcR1F +ZiV+P4NchhSxCZwKYs1BKGayBvP+M73+SD7HMjVvLl7PJ0dueARJlaJ4EmbDrYha +yxHPltGUCQ== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.full.crt.pem new file mode 100644 index 000000000..7cada76ea --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.full.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIHsMIGfAhQApWy46EwmOpV/VIP8IgHfjkipJTAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMyNVoXDTIyMDcxNjE3MjMy +NVowFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPooMMROndL9 +AqnmSih44BPe5SUrQB2LKC0cOjFdMAUGAytlcANBAK+rsHsQGAfFUwsICAG/AxRu +HTf//bQDm39yth1zAX1F1EEpslcA6GzMxpxx6JR63e7DLuK0wMSuwcck/S6IVg0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH0MIGnAhRNOeUvJH7I3o5UuHD3NMEcNvtTmTAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMyNVoXDTQxMDcwMTE3MjMy +NVowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA3/CcwdVBsRjy +befN2rMved2ir6ATejvSm7d/UM1UGdg1Qzcf5gTR7PqRLHvEkzB3Q1Lp/6AGPdxi +PhxKC6tIBA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.key.pem new file mode 100644 index 000000000..f99b069e0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7uy +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties new file mode 100644 index 000000000..7f0e9b10f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db-0:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties new file mode 100644 index 000000000..3eceaf784 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..af1ad902c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json @@ -0,0 +1,610 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/ca.cert.pem new file mode 100644 index 000000000..7ef930077 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQaGnDUoCKLNSotiEzgOWxgCjIneDAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIzMjVaFw00MTA3MDExNzIz +MjVaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0wLWFjY291bnQwKjAFBgMrZXADIQB+ +0cFNzVZE323rJZByp38wjbJLAR2aytrq1yZe/S0/RzAFBgMrZXADQQCkNCti5p+g +SvdkLOe0jxBzw+FNiq4mlO5o+HgN8OjEiAwf25/ZHppirVsiXypYPdBgUgy0WJKO +vJsurnNNZOUE +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/ca.cnf new file mode 100644 index 000000000..82efc4d8c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-0-account diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.cnf new file mode 100644 index 000000000..831a2d17f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-0 + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.crt.pem new file mode 100644 index 000000000..29a475ba5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.crt.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIHuMIGhAhQAxAdiw+nIOgqyenrTrrrtcVMe4zAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIzMjVaFw0yMjA3MTYxNzIz +MjVaMBYxFDASBgNVBAMMC3BlZXItbm9kZS0wMCowBQYDK2VwAyEAVyaJJ/JORLKk +zqM/BVmFjC6/JgL4pVDFvdsLcQAMSZgwBQYDK2VwA0EAhEpUyqCTKtdeKqXEcSbf +kMP4gn7SwBQJkYQs381knyJ33nvhYCILDpI4/eCt197C6Mu5R7kXx8mrby0W3C7m +CQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.csr.pem new file mode 100644 index 000000000..e5d6fef03 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGVMEkCAQAwFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn +8k5EsqTOoz8FWYWMLr8mAvilUMW92wtxAAxJmKAAMAUGAytlcANBAM/u7hnlO8Fc +fvqI6Cp8WcabjiTW6njd4v+ikUsrOgXnoSIAsl0FUp98QiNHkC9lHZFClW2vm0LX +2xKxaRlK5w4= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem new file mode 100644 index 000000000..d85a837eb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIHuMIGhAhQAxAdiw+nIOgqyenrTrrrtcVMe4zAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIzMjVaFw0yMjA3MTYxNzIz +MjVaMBYxFDASBgNVBAMMC3BlZXItbm9kZS0wMCowBQYDK2VwAyEAVyaJJ/JORLKk +zqM/BVmFjC6/JgL4pVDFvdsLcQAMSZgwBQYDK2VwA0EAhEpUyqCTKtdeKqXEcSbf +kMP4gn7SwBQJkYQs381knyJ33nvhYCILDpI4/eCt197C6Mu5R7kXx8mrby0W3C7m +CQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQaGnDUoCKLNSotiEzgOWxgCjIneDAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIzMjVaFw00MTA3MDExNzIz +MjVaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0wLWFjY291bnQwKjAFBgMrZXADIQB+ +0cFNzVZE323rJZByp38wjbJLAR2aytrq1yZe/S0/RzAFBgMrZXADQQCkNCti5p+g +SvdkLOe0jxBzw+FNiq4mlO5o+HgN8OjEiAwf25/ZHppirVsiXypYPdBgUgy0WJKO +vJsurnNNZOUE +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties new file mode 100644 index 000000000..60a52ef9c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = peer-node-0 +friendlyName = peer-node-0 +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json new file mode 100644 index 000000000..db3471b0c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json @@ -0,0 +1,533 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2", + "endpoint": { + "host": "api-node-0", + "port": 7900 + }, + "metadata": { + "name": "api-node-0", + "roles": "Api" + } + }, + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..1be3aa0b6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json @@ -0,0 +1,599 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..899a19b49 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/ca.cert.pem new file mode 100644 index 000000000..e691b1faa --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH2MIGpAhRRyd03QRxSlQ3z0e9pE7GH7pI5ujAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIzMjVaFw00MTA3MDExNzIz +MjVaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0xLWFjY291bnQwKjAFBgMrZXADIQD4 +4NlAAllAcZQdq4GsRVQ5CT1K4LDcxF7jazCmHx0suDAFBgMrZXADQQDUYa2a04vI +adwy0MjeJ8J3pi21J2bV0Y7uChg+uIQ0ArlixVUowuMnMAz/PGXUS3LRUnOFT1L5 +KT0RaK75RX4D +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/ca.cnf new file mode 100644 index 000000000..d771d6d2f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-1-account diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem new file mode 100644 index 000000000..ed75563ae --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEA+ODZQAJZQHGUHauBrEVUOQk9SuCw3MRe42swph8dLLg= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/metadata.yml new file mode 100644 index 000000000..83cf1581d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 404F4D08238867A2CBE61CB4D3AB5E6E8F69B6DBE80442025021F518B099BF8A +mainPublicKey: F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.cnf new file mode 100644 index 000000000..cfd4a8a75 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-1 + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.crt.pem new file mode 100644 index 000000000..15069b449 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhNYbQrmX9eiEccEOXV5I8sfUGIvMAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyNVoXDTIyMDcxNjE3MjMy +NVowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTEwKjAFBgMrZXADIQBAT00II4hnosvm +HLTTq15uj2m22+gEQgJQIfUYsJm/ijAFBgMrZXADQQD1PPwPxZ70SacE0/2qq3Xt +LyEann7kSYRqLUyM0SRNuwvQQShidr0f8N76K5hKBJXk3aAxoIC44Ee93ApzQYcL +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.csr.pem new file mode 100644 index 000000000..242155349 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGVMEkCAQAwFjEUMBIGA1UEAwwLcGVlci1ub2RlLTEwKjAFBgMrZXADIQBAT00I +I4hnosvmHLTTq15uj2m22+gEQgJQIfUYsJm/iqAAMAUGAytlcANBAGnB/L4O415m +MlD4wzlzH8g+mtHT/16Ca5USb4VK5yVOpe6qvOF0npB3X4/vRLeSldTIiRHqgsTS +vmKepVDfpwM= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem new file mode 100644 index 000000000..12e53dcc0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhNYbQrmX9eiEccEOXV5I8sfUGIvMAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyNVoXDTIyMDcxNjE3MjMy +NVowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTEwKjAFBgMrZXADIQBAT00II4hnosvm +HLTTq15uj2m22+gEQgJQIfUYsJm/ijAFBgMrZXADQQD1PPwPxZ70SacE0/2qq3Xt +LyEann7kSYRqLUyM0SRNuwvQQShidr0f8N76K5hKBJXk3aAxoIC44Ee93ApzQYcL +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH2MIGpAhRRyd03QRxSlQ3z0e9pE7GH7pI5ujAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIzMjVaFw00MTA3MDExNzIz +MjVaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0xLWFjY291bnQwKjAFBgMrZXADIQD4 +4NlAAllAcZQdq4GsRVQ5CT1K4LDcxF7jazCmHx0suDAFBgMrZXADQQDUYa2a04vI +adwy0MjeJ8J3pi21J2bV0Y7uChg+uIQ0ArlixVUowuMnMAz/PGXUS3LRUnOFT1L5 +KT0RaK75RX4D +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.key.pem new file mode 100644 index 000000000..f2722b855 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..a975deaaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 1000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 1000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KAVYGSQ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties new file mode 100644 index 000000000..15f703941 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = peer-node-1 +friendlyName = peer-node-1 +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json new file mode 100644 index 000000000..db3471b0c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json @@ -0,0 +1,533 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2", + "endpoint": { + "host": "api-node-0", + "port": 7900 + }, + "metadata": { + "name": "api-node-0", + "roles": "Api" + } + }, + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..c4753e026 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json @@ -0,0 +1,599 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..d4c78589e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/preset.yml new file mode 100644 index 000000000..0ce0e5fc6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/preset.yml @@ -0,0 +1,1580 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1615853185s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: Symbol Mainnet +baseNamespace: symbol +currencyMosaicId: 6BED913FA20223F8 +harvestingMosaicId: 6BED913FA20223F8 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +harvestNetworkFeeSinkAddress: NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI +namespaceRentalFeeSinkAddress: NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +mosaicRentalFeeSinkAddress: NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +nemesisSignerPublicKey: BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +networkType: 104 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: NDG2F6IHON7EDOXZCHSTSJ2YMUHDFXAQ2EUZHFA +rewardProgramControllerApiUrl: 'http://node-monitoring.symbolblockchain.io:7890' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 224 +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-001.symbolblockchain.io:3000' + - 'http://ngl-dual-002.symbolblockchain.io:3000' + - 'http://ngl-dual-003.symbolblockchain.io:3000' + - 'http://ngl-dual-004.symbolblockchain.io:3000' + - 'http://ngl-dual-101.symbolblockchain.io:3000' + - 'http://ngl-dual-102.symbolblockchain.io:3000' + - 'http://ngl-dual-103.symbolblockchain.io:3000' + - 'http://ngl-dual-104.symbolblockchain.io:3000' + - 'http://ngl-dual-201.symbolblockchain.io:3000' + - 'http://ngl-dual-202.symbolblockchain.io:3000' + - 'http://ngl-dual-203.symbolblockchain.io:3000' + - 'http://ngl-dual-204.symbolblockchain.io:3000' + - 'http://ngl-dual-301.symbolblockchain.io:3000' + - 'http://ngl-dual-302.symbolblockchain.io:3000' + - 'http://ngl-dual-303.symbolblockchain.io:3000' + - 'http://ngl-dual-304.symbolblockchain.io:3000' + - 'http://ngl-dual-401.symbolblockchain.io:3000' + - 'http://ngl-dual-402.symbolblockchain.io:3000' + - 'http://ngl-dual-403.symbolblockchain.io:3000' + - 'http://ngl-dual-404.symbolblockchain.io:3000' + - 'http://ngl-dual-501.symbolblockchain.io:3000' + - 'http://ngl-dual-502.symbolblockchain.io:3000' + - 'http://ngl-dual-503.symbolblockchain.io:3000' + - 'http://ngl-dual-504.symbolblockchain.io:3000' + - 'http://ngl-dual-601.symbolblockchain.io:3000' + - 'http://ngl-dual-602.symbolblockchain.io:3000' + - 'http://ngl-dual-603.symbolblockchain.io:3000' + - 'http://ngl-dual-604.symbolblockchain.io:3000' + - 'http://ngl-dual-005.symbolblockchain.io:3000' + - 'http://ngl-dual-006.symbolblockchain.io:3000' + - 'http://ngl-dual-105.symbolblockchain.io:3000' + - 'http://ngl-dual-106.symbolblockchain.io:3000' + - 'http://ngl-dual-205.symbolblockchain.io:3000' + - 'http://ngl-dual-206.symbolblockchain.io:3000' + - 'http://ngl-dual-305.symbolblockchain.io:3000' + - 'http://ngl-dual-306.symbolblockchain.io:3000' + - 'http://ngl-dual-405.symbolblockchain.io:3000' + - 'http://ngl-dual-406.symbolblockchain.io:3000' + - 'http://ngl-dual-505.symbolblockchain.io:3000' + - 'http://ngl-dual-506.symbolblockchain.io:3000' + - 'http://ngl-dual-605.symbolblockchain.io:3000' + - 'http://ngl-dual-606.symbolblockchain.io:3000' + - 'http://ngl-api-001.symbolblockchain.io:3000' + - 'http://ngl-api-301.symbolblockchain.io:3000' + - 'http://ngl-api-401.symbolblockchain.io:3000' + - 'http://ngl-api-501.symbolblockchain.io:3000' + - 'http://ngl-api-601.symbolblockchain.io:3000' +knownPeers: + api-node: + - + publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - + publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - + publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - + publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - + publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - + publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - + publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - + publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - + publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - + publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - + publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - + publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - + publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - + publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - + publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - + publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - + publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - + publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - + publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - + publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - + publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - + publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - + publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - + publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - + publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - + publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - + publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - + publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - + publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - + publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - + publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - + publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - + publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - + publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - + publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - + publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - + publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - + publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - + publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - + publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - + publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - + publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api + peer-node: + - + publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - + publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - + publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - + publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - + publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - + publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - + publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - + publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - + publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - + publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - + publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - + publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - + publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - + publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - + publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - + publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - + publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - + publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - + publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - + publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - + publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - + publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - + publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - + publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - + publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - + publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - + publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - + publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - + publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - + publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - + publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - + publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - + publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - + publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - + publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - + publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - + publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - + publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - + publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - + publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - + publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - + publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - + publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - + publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - + publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +explorerUrl: 'http://localhost:90' +faucetUrl: 'http://localhost:100' +databases: + - + name: db-0 + openPort: '27017' +nodes: + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + voting: true + api: false + name: peer-node-0 + friendlyName: peer-node-0 + host: peer-node-0 + openPort: '7900' + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + voting: true + api: false + name: peer-node-1 + friendlyName: peer-node-1 + host: peer-node-1 + openPort: '7901' + - + syncsource: false + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: false + api: true + friendlyName: api-node-0 + name: api-node-0 + host: api-node-0 + brokerName: api-node-broker-0 + brokerOpenPort: '8002' + databaseHost: db-0 + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + apiNodeName: api-node-0 + apiNodeHost: api-node-0 + apiNodeBrokerHost: api-node-broker-0 + name: rest-gateway-0 + description: '' + databaseHost: db-0 + openPort: '3000' + ipv4_address: 172.20.0.25 +wallets: [] +explorers: [] +faucets: [] +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: mainnet +assembly: multinode +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + - {} +networkIdentifier: public +networkName: public diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/api-node-0-config.csv b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/api-node-0-config.csv new file mode 100644 index 000000000..dc2d4c634 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/api-node-0-config.csv @@ -0,0 +1,855 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db-0:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; false +extension.syncsource; false +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; +epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; api-node-0; string; Node host (leave empty to auto-detect IP). +friendlyName; api-node-0; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/api-node-0-config.rst b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/api-node-0-config.rst new file mode 100644 index 000000000..8b267720e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/api-node-0-config.rst @@ -0,0 +1,874 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db-0:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; false + extension.syncsource; false + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; + epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; api-node-0; string; Node host (leave empty to auto-detect IP). + friendlyName; api-node-0; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-0-config.csv b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-0-config.csv new file mode 100644 index 000000000..2dd71d2be --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-0-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; +epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; peer-node-0; string; Node host (leave empty to auto-detect IP). +friendlyName; peer-node-0; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-0-config.rst b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-0-config.rst new file mode 100644 index 000000000..df0fcddc0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-0-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; + epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; peer-node-0; string; Node host (leave empty to auto-detect IP). + friendlyName; peer-node-0; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-1-config.csv b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-1-config.csv new file mode 100644 index 000000000..8ff1e6f19 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-1-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; NCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KAVYGSQ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; +epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; peer-node-1; string; Node host (leave empty to auto-detect IP). +friendlyName; peer-node-1; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-1-config.rst b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-1-config.rst new file mode 100644 index 000000000..3f0ce35fb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-multinode-target/reports/peer-node-1-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; NCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KAVYGSQ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; + epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; peer-node-1; string; Node host (leave empty to auto-detect IP). + friendlyName; peer-node-1; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/addresses.yml new file mode 100644 index 000000000..dc46263d5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/addresses.yml @@ -0,0 +1,23 @@ +version: 2 +networkType: 104 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: Peer + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: NBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TYKV3Q + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: NDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPRBXQQ + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: NDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4B26GQI diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/docker-compose.yml new file mode 100644 index 000000000..963e7712d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2.4' +services: + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..5301f739e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6bb65803d Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..8ef9324a5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..645a1b893 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..7b6255440 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..b3f277408 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQAhHfMbEcdNc6NN1KVHCyGRQcFeTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyN1oXDTQxMDcwMTE3MjMyN1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAntCXiA6QPhxRX8+fL12LIl0S53W2 +JD8+aeRnlXOcZeRHKT2h+75Fu1zM+ZnohDwda7P4BeqcTIm+de0VOVLdBw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..d4750f798 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAjLX08wG5OCji9EfTiZjNyT93MzAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyN1oXDTIyMDcxNjE3MjMyN1owDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAKsKV0XYM7qzOo18rpnoQccaKZGzVWMhuccEpnO5 +aAxVj/IZ7DdE1ZiY3Sz78zrSGb382+axtzLFccYHXMqOSQ8= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..c2c73bcad --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAjLX08wG5OCji9EfTiZjNyT93MzAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyN1oXDTIyMDcxNjE3MjMyN1owDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAKsKV0XYM7qzOo18rpnoQccaKZGzVWMhuccEpnO5 +aAxVj/IZ7DdE1ZiY3Sz78zrSGb382+axtzLFccYHXMqOSQ8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQAhHfMbEcdNc6NN1KVHCyGRQcFeTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyN1oXDTQxMDcwMTE3MjMyN1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAntCXiA6QPhxRX8+fL12LIl0S53W2 +JD8+aeRnlXOcZeRHKT2h+75Fu1zM+ZnohDwda7P4BeqcTIm+de0VOVLdBw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..54d76fd20 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/preset.yml new file mode 100644 index 000000000..36f87ad43 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/preset.yml @@ -0,0 +1,1529 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1615853185s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: Symbol Mainnet +baseNamespace: symbol +currencyMosaicId: 6BED913FA20223F8 +harvestingMosaicId: 6BED913FA20223F8 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +harvestNetworkFeeSinkAddress: NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI +namespaceRentalFeeSinkAddress: NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +mosaicRentalFeeSinkAddress: NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +nemesisSignerPublicKey: BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +networkType: 104 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: NDG2F6IHON7EDOXZCHSTSJ2YMUHDFXAQ2EUZHFA +rewardProgramControllerApiUrl: 'http://node-monitoring.symbolblockchain.io:7890' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 224 +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-001.symbolblockchain.io:3000' + - 'http://ngl-dual-002.symbolblockchain.io:3000' + - 'http://ngl-dual-003.symbolblockchain.io:3000' + - 'http://ngl-dual-004.symbolblockchain.io:3000' + - 'http://ngl-dual-101.symbolblockchain.io:3000' + - 'http://ngl-dual-102.symbolblockchain.io:3000' + - 'http://ngl-dual-103.symbolblockchain.io:3000' + - 'http://ngl-dual-104.symbolblockchain.io:3000' + - 'http://ngl-dual-201.symbolblockchain.io:3000' + - 'http://ngl-dual-202.symbolblockchain.io:3000' + - 'http://ngl-dual-203.symbolblockchain.io:3000' + - 'http://ngl-dual-204.symbolblockchain.io:3000' + - 'http://ngl-dual-301.symbolblockchain.io:3000' + - 'http://ngl-dual-302.symbolblockchain.io:3000' + - 'http://ngl-dual-303.symbolblockchain.io:3000' + - 'http://ngl-dual-304.symbolblockchain.io:3000' + - 'http://ngl-dual-401.symbolblockchain.io:3000' + - 'http://ngl-dual-402.symbolblockchain.io:3000' + - 'http://ngl-dual-403.symbolblockchain.io:3000' + - 'http://ngl-dual-404.symbolblockchain.io:3000' + - 'http://ngl-dual-501.symbolblockchain.io:3000' + - 'http://ngl-dual-502.symbolblockchain.io:3000' + - 'http://ngl-dual-503.symbolblockchain.io:3000' + - 'http://ngl-dual-504.symbolblockchain.io:3000' + - 'http://ngl-dual-601.symbolblockchain.io:3000' + - 'http://ngl-dual-602.symbolblockchain.io:3000' + - 'http://ngl-dual-603.symbolblockchain.io:3000' + - 'http://ngl-dual-604.symbolblockchain.io:3000' + - 'http://ngl-dual-005.symbolblockchain.io:3000' + - 'http://ngl-dual-006.symbolblockchain.io:3000' + - 'http://ngl-dual-105.symbolblockchain.io:3000' + - 'http://ngl-dual-106.symbolblockchain.io:3000' + - 'http://ngl-dual-205.symbolblockchain.io:3000' + - 'http://ngl-dual-206.symbolblockchain.io:3000' + - 'http://ngl-dual-305.symbolblockchain.io:3000' + - 'http://ngl-dual-306.symbolblockchain.io:3000' + - 'http://ngl-dual-405.symbolblockchain.io:3000' + - 'http://ngl-dual-406.symbolblockchain.io:3000' + - 'http://ngl-dual-505.symbolblockchain.io:3000' + - 'http://ngl-dual-506.symbolblockchain.io:3000' + - 'http://ngl-dual-605.symbolblockchain.io:3000' + - 'http://ngl-dual-606.symbolblockchain.io:3000' + - 'http://ngl-api-001.symbolblockchain.io:3000' + - 'http://ngl-api-301.symbolblockchain.io:3000' + - 'http://ngl-api-401.symbolblockchain.io:3000' + - 'http://ngl-api-501.symbolblockchain.io:3000' + - 'http://ngl-api-601.symbolblockchain.io:3000' +knownPeers: + api-node: + - + publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - + publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - + publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - + publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - + publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - + publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - + publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - + publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - + publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - + publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - + publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - + publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - + publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - + publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - + publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - + publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - + publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - + publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - + publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - + publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - + publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - + publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - + publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - + publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - + publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - + publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - + publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - + publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - + publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - + publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - + publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - + publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - + publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - + publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - + publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - + publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - + publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - + publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - + publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - + publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - + publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - + publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api + peer-node: + - + publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - + publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - + publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - + publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - + publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - + publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - + publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - + publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - + publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - + publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - + publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - + publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - + publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - + publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - + publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - + publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - + publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - + publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - + publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - + publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - + publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - + publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - + publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - + publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - + publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - + publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - + publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - + publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - + publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - + publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - + publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - + publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - + publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - + publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - + publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - + publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - + publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - + publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - + publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - + publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - + publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - + publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - + publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - + publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - + publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nodes: + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + api: false + name: node + openPort: true +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: mainnet +assembly: peer +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} +databases: [] +gateways: [] +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public +networkName: public diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/reports/node-config.csv new file mode 100644 index 000000000..40390b0e4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; +epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/reports/node-config.rst new file mode 100644 index 000000000..8ec80ee67 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; + epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/addresses.yml new file mode 100644 index 000000000..eacadd3ab --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/addresses.yml @@ -0,0 +1,29 @@ +version: 2 +networkType: 104 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +nodes: + - + name: node + friendlyName: myRegularNode + roles: 'Peer,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: NBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TYKV3Q + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: NDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPRBXQQ + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: NDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4B26GQI + voting: + - + publicKey: 699B5C153608E1C1980EFA5B982411AD73AD66F72B46F979C84E4684A66E7AE3 + startEpoch: 224 + endEpoch: 583 + filename: private_key_tree1.dat diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/docker-compose.yml new file mode 100644 index 000000000..5de6d09f1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/docker-compose.yml @@ -0,0 +1,27 @@ +version: '2.4' +services: + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - myRegularNode.host.com + hostname: myRegularNode.host.com +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..5301f739e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6bb65803d Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..8ef9324a5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..645a1b893 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..7b6255440 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..e46215cbd --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQM4STRNyyYdS9T2wsomfrRiy9OkTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyOVoXDTQxMDcwMTE3MjMyOVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAjqfSZorCbNO382oa0I09XAbVdt/L +hlricgAXY48slbvkNu7sieHOy4Ms3DabiK1B3PYgrzbGbFu3hCZHSUIOAw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..5c0983791 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAsU6cEj6k+WL9nIQySkC9VimbLDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyOVoXDTIyMDcxNjE3MjMyOVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAMhs62b2Jngj/4XVmI+8oHYydfDX41Ceq6hwIlBC +rVtyDaXA0zrEVWvX3IK6zDfhVkFS3S4+Ys9GvLYXi7OchgU= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..e60194bfa --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAsU6cEj6k+WL9nIQySkC9VimbLDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyOVoXDTIyMDcxNjE3MjMyOVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAMhs62b2Jngj/4XVmI+8oHYydfDX41Ceq6hwIlBC +rVtyDaXA0zrEVWvX3IK6zDfhVkFS3S4+Ys9GvLYXi7OchgU= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQM4STRNyyYdS9T2wsomfrRiy9OkTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMyOVoXDTQxMDcwMTE3MjMyOVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAjqfSZorCbNO382oa0I09XAbVdt/L +hlricgAXY48slbvkNu7sieHOy4Ms3DabiK1B3PYgrzbGbFu3hCZHSUIOAw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..ff374a678 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..0e2f06f60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public +nemesisSignerPublicKey = BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +nodeEqualityStrategy = host +generationHashSeed = 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +epochAdjustment = 1615853185s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x6BED'913F'A202'23F8 +harvestingMosaicId = 0x6BED'913F'A202'23F8 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..0d2210cf1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..011f573fe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,522 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD", + "endpoint": { + "host": "ngl-dual-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610", + "endpoint": { + "host": "ngl-dual-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929", + "endpoint": { + "host": "ngl-dual-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-003", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE", + "endpoint": { + "host": "ngl-dual-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-004", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B", + "endpoint": { + "host": "ngl-dual-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2", + "endpoint": { + "host": "ngl-dual-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-102", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1", + "endpoint": { + "host": "ngl-dual-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-103", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436", + "endpoint": { + "host": "ngl-dual-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-104", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89", + "endpoint": { + "host": "ngl-dual-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D", + "endpoint": { + "host": "ngl-dual-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-202", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592", + "endpoint": { + "host": "ngl-dual-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-203", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D", + "endpoint": { + "host": "ngl-dual-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-204", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA", + "endpoint": { + "host": "ngl-dual-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979", + "endpoint": { + "host": "ngl-dual-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-302", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9", + "endpoint": { + "host": "ngl-dual-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-303", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1", + "endpoint": { + "host": "ngl-dual-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-304", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19", + "endpoint": { + "host": "ngl-dual-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369", + "endpoint": { + "host": "ngl-dual-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-402", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198", + "endpoint": { + "host": "ngl-dual-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-403", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC", + "endpoint": { + "host": "ngl-dual-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-404", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D", + "endpoint": { + "host": "ngl-dual-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2", + "endpoint": { + "host": "ngl-dual-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B", + "endpoint": { + "host": "ngl-dual-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-503", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440", + "endpoint": { + "host": "ngl-dual-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-504", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A", + "endpoint": { + "host": "ngl-dual-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6", + "endpoint": { + "host": "ngl-dual-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF", + "endpoint": { + "host": "ngl-dual-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-603", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF", + "endpoint": { + "host": "ngl-dual-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-604", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1", + "endpoint": { + "host": "ngl-dual-005.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-005", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51", + "endpoint": { + "host": "ngl-dual-006.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-006", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591", + "endpoint": { + "host": "ngl-dual-105.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-105", + "roles": "Api,Peer" + } + }, + { + "publicKey": "AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8", + "endpoint": { + "host": "ngl-dual-106.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-106", + "roles": "Api,Peer" + } + }, + { + "publicKey": "7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3", + "endpoint": { + "host": "ngl-dual-205.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-205", + "roles": "Api,Peer" + } + }, + { + "publicKey": "02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6", + "endpoint": { + "host": "ngl-dual-206.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-206", + "roles": "Api,Peer" + } + }, + { + "publicKey": "36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795", + "endpoint": { + "host": "ngl-dual-305.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-305", + "roles": "Api,Peer" + } + }, + { + "publicKey": "9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA", + "endpoint": { + "host": "ngl-dual-306.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-306", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95", + "endpoint": { + "host": "ngl-dual-405.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-405", + "roles": "Api,Peer" + } + }, + { + "publicKey": "0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F", + "endpoint": { + "host": "ngl-dual-406.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-406", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29", + "endpoint": { + "host": "ngl-dual-505.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-505", + "roles": "Api,Peer" + } + }, + { + "publicKey": "B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C", + "endpoint": { + "host": "ngl-dual-506.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-506", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571", + "endpoint": { + "host": "ngl-dual-605.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-605", + "roles": "Api,Peer" + } + }, + { + "publicKey": "E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC", + "endpoint": { + "host": "ngl-dual-606.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-606", + "roles": "Api,Peer" + } + }, + { + "publicKey": "47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011", + "endpoint": { + "host": "ngl-api-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684", + "endpoint": { + "host": "ngl-api-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-301", + "roles": "Api" + } + }, + { + "publicKey": "642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B", + "endpoint": { + "host": "ngl-api-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-401", + "roles": "Api" + } + }, + { + "publicKey": "E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79", + "endpoint": { + "host": "ngl-api-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-501", + "roles": "Api" + } + }, + { + "publicKey": "0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C", + "endpoint": { + "host": "ngl-api-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-601", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..6cda5320b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,588 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF", + "endpoint": { + "host": "ngl-beacon-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF", + "endpoint": { + "host": "ngl-beacon-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0", + "endpoint": { + "host": "ngl-beacon-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C", + "endpoint": { + "host": "ngl-beacon-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-301", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7", + "endpoint": { + "host": "ngl-beacon-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1", + "endpoint": { + "host": "ngl-beacon-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A", + "endpoint": { + "host": "ngl-beacon-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F", + "endpoint": { + "host": "ngl-beacon-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775", + "endpoint": { + "host": "ngl-beacon-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0", + "endpoint": { + "host": "ngl-beacon-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395", + "endpoint": { + "host": "ngl-beacon-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9", + "endpoint": { + "host": "ngl-beacon-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058", + "endpoint": { + "host": "ngl-beacon-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD", + "endpoint": { + "host": "ngl-beacon-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217", + "endpoint": { + "host": "ngl-beacon-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-003", + "roles": "Peer" + } + }, + { + "publicKey": "DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202", + "endpoint": { + "host": "ngl-beacon-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-004", + "roles": "Peer" + } + }, + { + "publicKey": "F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A", + "endpoint": { + "host": "ngl-beacon-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-103", + "roles": "Peer" + } + }, + { + "publicKey": "4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A", + "endpoint": { + "host": "ngl-beacon-104.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-104", + "roles": "Peer" + } + }, + { + "publicKey": "EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E", + "endpoint": { + "host": "ngl-beacon-203.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-203", + "roles": "Peer" + } + }, + { + "publicKey": "2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B", + "endpoint": { + "host": "ngl-beacon-204.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-204", + "roles": "Peer" + } + }, + { + "publicKey": "C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA", + "endpoint": { + "host": "ngl-beacon-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-303", + "roles": "Peer" + } + }, + { + "publicKey": "082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB", + "endpoint": { + "host": "ngl-beacon-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-304", + "roles": "Peer" + } + }, + { + "publicKey": "11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1", + "endpoint": { + "host": "ngl-beacon-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-403", + "roles": "Peer" + } + }, + { + "publicKey": "66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27", + "endpoint": { + "host": "ngl-beacon-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-404", + "roles": "Peer" + } + }, + { + "publicKey": "C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655", + "endpoint": { + "host": "ngl-beacon-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-503", + "roles": "Peer" + } + }, + { + "publicKey": "BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07", + "endpoint": { + "host": "ngl-beacon-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-504", + "roles": "Peer" + } + }, + { + "publicKey": "5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A", + "endpoint": { + "host": "ngl-beacon-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-603", + "roles": "Peer" + } + }, + { + "publicKey": "00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39", + "endpoint": { + "host": "ngl-beacon-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-604", + "roles": "Peer" + } + }, + { + "publicKey": "AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691", + "endpoint": { + "host": "ngl-peer-001.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer" + } + }, + { + "publicKey": "990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822", + "endpoint": { + "host": "ngl-peer-301.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489", + "endpoint": { + "host": "ngl-peer-401.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer" + } + }, + { + "publicKey": "D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510", + "endpoint": { + "host": "ngl-peer-601.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer" + } + }, + { + "publicKey": "92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806", + "endpoint": { + "host": "ngl-peer-501.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer" + } + }, + { + "publicKey": "DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D", + "endpoint": { + "host": "ngl-peer-002.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-002", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0", + "endpoint": { + "host": "ngl-peer-003.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-003", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE", + "endpoint": { + "host": "ngl-peer-004.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-004", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A", + "endpoint": { + "host": "ngl-peer-101.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD", + "endpoint": { + "host": "ngl-peer-102.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-102", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1", + "endpoint": { + "host": "ngl-peer-103.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-103", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F", + "endpoint": { + "host": "ngl-peer-201.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF", + "endpoint": { + "host": "ngl-peer-202.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C", + "endpoint": { + "host": "ngl-peer-302.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB", + "endpoint": { + "host": "ngl-peer-303.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-303", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7", + "endpoint": { + "host": "ngl-peer-304.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-304", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644", + "endpoint": { + "host": "ngl-peer-402.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-402", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD", + "endpoint": { + "host": "ngl-peer-403.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-403", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D", + "endpoint": { + "host": "ngl-peer-404.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-404", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86", + "endpoint": { + "host": "ngl-peer-502.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-502", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF", + "endpoint": { + "host": "ngl-peer-503.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-503", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2", + "endpoint": { + "host": "ngl-peer-504.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-504", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170", + "endpoint": { + "host": "ngl-peer-602.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-602", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2", + "endpoint": { + "host": "ngl-peer-603.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-603", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85", + "endpoint": { + "host": "ngl-peer-604.symbolblockchain.io", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-604", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..223ff4bc4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/nodes/node/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/preset.yml new file mode 100644 index 000000000..eec99366c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/preset.yml @@ -0,0 +1,1535 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1615853185s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: Symbol Mainnet +baseNamespace: symbol +currencyMosaicId: 6BED913FA20223F8 +harvestingMosaicId: 6BED913FA20223F8 +nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 +harvestNetworkFeeSinkAddress: NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI +namespaceRentalFeeSinkAddress: NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA +mosaicRentalFeeSinkAddress: NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA +nemesisSignerPublicKey: BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F +networkType: 104 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: NDG2F6IHON7EDOXZCHSTSJ2YMUHDFXAQ2EUZHFA +rewardProgramControllerApiUrl: 'http://node-monitoring.symbolblockchain.io:7890' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 224 +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-001.symbolblockchain.io:3000' + - 'http://ngl-dual-002.symbolblockchain.io:3000' + - 'http://ngl-dual-003.symbolblockchain.io:3000' + - 'http://ngl-dual-004.symbolblockchain.io:3000' + - 'http://ngl-dual-101.symbolblockchain.io:3000' + - 'http://ngl-dual-102.symbolblockchain.io:3000' + - 'http://ngl-dual-103.symbolblockchain.io:3000' + - 'http://ngl-dual-104.symbolblockchain.io:3000' + - 'http://ngl-dual-201.symbolblockchain.io:3000' + - 'http://ngl-dual-202.symbolblockchain.io:3000' + - 'http://ngl-dual-203.symbolblockchain.io:3000' + - 'http://ngl-dual-204.symbolblockchain.io:3000' + - 'http://ngl-dual-301.symbolblockchain.io:3000' + - 'http://ngl-dual-302.symbolblockchain.io:3000' + - 'http://ngl-dual-303.symbolblockchain.io:3000' + - 'http://ngl-dual-304.symbolblockchain.io:3000' + - 'http://ngl-dual-401.symbolblockchain.io:3000' + - 'http://ngl-dual-402.symbolblockchain.io:3000' + - 'http://ngl-dual-403.symbolblockchain.io:3000' + - 'http://ngl-dual-404.symbolblockchain.io:3000' + - 'http://ngl-dual-501.symbolblockchain.io:3000' + - 'http://ngl-dual-502.symbolblockchain.io:3000' + - 'http://ngl-dual-503.symbolblockchain.io:3000' + - 'http://ngl-dual-504.symbolblockchain.io:3000' + - 'http://ngl-dual-601.symbolblockchain.io:3000' + - 'http://ngl-dual-602.symbolblockchain.io:3000' + - 'http://ngl-dual-603.symbolblockchain.io:3000' + - 'http://ngl-dual-604.symbolblockchain.io:3000' + - 'http://ngl-dual-005.symbolblockchain.io:3000' + - 'http://ngl-dual-006.symbolblockchain.io:3000' + - 'http://ngl-dual-105.symbolblockchain.io:3000' + - 'http://ngl-dual-106.symbolblockchain.io:3000' + - 'http://ngl-dual-205.symbolblockchain.io:3000' + - 'http://ngl-dual-206.symbolblockchain.io:3000' + - 'http://ngl-dual-305.symbolblockchain.io:3000' + - 'http://ngl-dual-306.symbolblockchain.io:3000' + - 'http://ngl-dual-405.symbolblockchain.io:3000' + - 'http://ngl-dual-406.symbolblockchain.io:3000' + - 'http://ngl-dual-505.symbolblockchain.io:3000' + - 'http://ngl-dual-506.symbolblockchain.io:3000' + - 'http://ngl-dual-605.symbolblockchain.io:3000' + - 'http://ngl-dual-606.symbolblockchain.io:3000' + - 'http://ngl-api-001.symbolblockchain.io:3000' + - 'http://ngl-api-301.symbolblockchain.io:3000' + - 'http://ngl-api-401.symbolblockchain.io:3000' + - 'http://ngl-api-501.symbolblockchain.io:3000' + - 'http://ngl-api-601.symbolblockchain.io:3000' +knownPeers: + api-node: + - + publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - + publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - + publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - + publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - + publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - + publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - + publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - + publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - + publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - + publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - + publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - + publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - + publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - + publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - + publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - + publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - + publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - + publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - + publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - + publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - + publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - + publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - + publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - + publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - + publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - + publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - + publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - + publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - + publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - + publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - + publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - + publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - + publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - + publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - + publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - + publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - + publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - + publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - + publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - + publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - + publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - + publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api + peer-node: + - + publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - + publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - + publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - + publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - + publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - + publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - + publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - + publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - + publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - + publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - + publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - + publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - + publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - + publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - + publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - + publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - + publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - + publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - + publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - + publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - + publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - + publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - + publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - + publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - + publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - + publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - + publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - + publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - + publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - + publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - + publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - + publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - + publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - + publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - + publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - + publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - + publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - + publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - + publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - + publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - + publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - + publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - + publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - + publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - + publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nodes: + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + api: false + name: node + openPort: true + friendlyName: myRegularNode + host: myRegularNode.host.com + voting: true +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: mainnet +assembly: peer +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - + friendlyName: myRegularNode + host: myRegularNode.host.com + voting: true +databases: [] +gateways: [] +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public +networkName: public diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/reports/node-config.csv new file mode 100644 index 000000000..6a3cf00b6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; +epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). +friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/reports/node-config.rst new file mode 100644 index 000000000..c84d39132 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/mainnet-peer-voting-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; NCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SUVEYY; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; + epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). + friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/addresses.yml new file mode 100644 index 000000000..984263ad6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/addresses.yml @@ -0,0 +1,34 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: Api + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: currency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/docker-compose.yml new file mode 100644 index 000000000..486c0e258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/docker-compose.yml @@ -0,0 +1,68 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..2085b0de4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQdzPiRS/hhbvJm+ySaySLMWQZTNTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI0MloXDTQxMDcwMTE3MjI0MlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAkE5vNZDyoA739EhYuMmLd6e/sST4 +4gYBLfNBiWa0nGWaNi8rfOKAajqPdqMyyjqXuRWIOxP9xyQlrk/TLsciCA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..493eed9ee --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMQQXovfbNMapSe6YpRr3b/1YoJMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjQyWhcNMjIwNzE2MTcyMjQyWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAsxAbNz8DSsyNsHNWHCxQzw0Ylvs5JddkT0NwvDhX +ucFnkUsdNbTetWKL4C6WK7IQP0CWhvX2JpBEXfJKbaPfBw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..f4be33a50 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..414d55bfc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/gateways/rest-gateway/rest.json @@ -0,0 +1,91 @@ +{ + "network": { + "name": "privateTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..6b723f742 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..71de81fb7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..9bd4c5ee4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..848c6d31f Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..60ae681fa Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..21acd534a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 4 + Voting Count: 0 + Voting Balance: 0 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: 8C5F9CEC7C02FB977A450E8DBD4C672D318A5BCB3DA425033DB3016C68EE83C5 + Receipts Hash: A77BEEE3442A28982C353CAC63D9A7744EDC554EF9A832825818C45ECDED0117 + State Hash: 6130A14956C303ED5B0AF332C27AA94B7ACD97DA6A1657613054E0CD77147CF3 +--- Components (9) --- + + F32D1E698AB7EC23E6758491B8AABBCBCA843349C6212E7774F7A0ADB30A59FB + + FBA6D331D6AC65369FBAF3C527AAC1B02EE9AFB3EE1CBBEDFCB5BC5279F8B432 + + D11FC31CBB5533C6D4F41765D11716F33B66C2452067C292CA16A590010F2590 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..50133bb2d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,46 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +cat = true +cat.currency = true + +[namespace>cat] + +duration = 0 + +[mosaics] + +cat:currency = true + +[mosaic>cat:currency] + +divisibility = 6 +duration = 0 +supply = 8'998'999'998'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>cat:currency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 4'449'499'999'000'000 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 2'249'749'999'500'000 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 2'249'749'999'500'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 50'000'000'000'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..f4be33a50 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..2085b0de4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQdzPiRS/hhbvJm+ySaySLMWQZTNTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI0MloXDTQxMDcwMTE3MjI0MlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAkE5vNZDyoA739EhYuMmLd6e/sST4 +4gYBLfNBiWa0nGWaNi8rfOKAajqPdqMyyjqXuRWIOxP9xyQlrk/TLsciCA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..493eed9ee --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMQQXovfbNMapSe6YpRr3b/1YoJMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjQyWhcNMjIwNzE2MTcyMjQyWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAsxAbNz8DSsyNsHNWHCxQzw0Ylvs5JddkT0NwvDhX +ucFnkUsdNbTetWKL4C6WK7IQP0CWhvX2JpBEXfJKbaPfBw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..a8b291c48 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMQQXovfbNMapSe6YpRr3b/1YoJMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjQyWhcNMjIwNzE2MTcyMjQyWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAsxAbNz8DSsyNsHNWHCxQzw0Ylvs5JddkT0NwvDhX +ucFnkUsdNbTetWKL4C6WK7IQP0CWhvX2JpBEXfJKbaPfBw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQdzPiRS/hhbvJm+ySaySLMWQZTNTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI0MloXDTQxMDcwMTE3MjI0MlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAkE5vNZDyoA739EhYuMmLd6e/sST4 +4gYBLfNBiWa0nGWaNi8rfOKAajqPdqMyyjqXuRWIOxP9xyQlrk/TLsciCA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..f4be33a50 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/preset.yml new file mode 100644 index 000000000..035343c45 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/preset.yml @@ -0,0 +1,298 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +totalChainImportance: 8998999998000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: cat +networkDescription: Symbol Local Bootstrap +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: currency + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 4449499999000000 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 2249749999500000 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 2249749999500000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 50000000000000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: false + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: false + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: singleCurrency +assembly: api +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +explorers: [] +wallets: [] +faucets: [] +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 5F54633454C3685B diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/reports/node-config.csv new file mode 100644 index 000000000..0b828cb9a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/reports/node-config.csv @@ -0,0 +1,434 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; false +extension.syncsource; false +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/reports/node-config.rst new file mode 100644 index 000000000..3369c81b0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-api-target/reports/node-config.rst @@ -0,0 +1,453 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; false + extension.syncsource; false + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/addresses.yml new file mode 100644 index 000000000..eaaa9e013 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/addresses.yml @@ -0,0 +1,42 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: 'Peer,Api' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: VDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPAOKEA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: VDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4AMJVEA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: currency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/docker-compose.yml new file mode 100644 index 000000000..01324356f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/docker-compose.yml @@ -0,0 +1,117 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - node + hostname: node + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 + wallet: + container_name: wallet + image: 'symbolplatform/symbol-desktop-wallet:1.0.1' + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '80:80' + restart: 'on-failure:2' + volumes: + - '../wallets/wallet:/usr/share/nginx/html/config:ro' + explorer: + container_name: explorer + image: 'symbolplatform/symbol-explorer:1.1.0-alpha' + entrypoint: ash -c "/bin/ash /symbol-commands/run.sh explorer" + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '90:4000' + restart: 'on-failure:2' + volumes: + - '../explorers/explorer:/symbol-workdir:ro' + - './explorer:/symbol-commands:ro' + faucet: + container_name: faucet + image: 'symbolplatform/symbol-faucet:1.0.1-alpha' + stop_signal: SIGINT + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + NATIVE_CURRENCY_NAME: cat.currency + FAUCET_PRIVATE_KEY: '' + NATIVE_CURRENCY_ID: 5F54633454C3685B + restart: 'on-failure:2' + ports: + - '100:4000' + depends_on: + - rest-gateway +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/explorers/explorer/default.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/explorers/explorer/default.json new file mode 100644 index 000000000..5e74840d3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/explorers/explorer/default.json @@ -0,0 +1,52 @@ +{ + "peersApi": { + "defaultNode": "http://node:3000", + "nodes": [ + "http://node:3000" + ] + }, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "cat.currency", + "mosaicId": "5F54633454C3685B", + "divisibility": "6", + "namespaceId": "85BBEA6CC462B244", + "networkIdentifier": 168 + }, + "footer": { + "link": [ + { + "href": "https://nemflash.io/", + "text": "NEM News", + "icon": "IconNewspaper" + }, + { + "href": "https://forum.nem.io/", + "text": "Forum", + "icon": "IconForum" + }, + { + "href": "https://t.me/nemred", + "text": "Telegram", + "icon": "IconTelegram" + }, + { + "href": "https://www.reddit.com/r/nem/", + "text": "Reddit", + "icon": "IconReddit" + }, + { + "href": "https://github.com/nemtech", + "text": "Github", + "icon": "IconGithub" + }, + { + "href": "http://localhost:100/", + "text": "Faucet", + "icon": "IconHomeCurrencyUsd" + } + ] + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..9ac9f4e9c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRt/NU//CvPhQq+TVdkOKyxTF7+ajAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI0N1oXDTQxMDcwMTE3MjI0N1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAAJ77nrTz4YVs9B3rpgirXE8XsBHf +HgJf2BJyBWP1xHoTZZ2gUfiF1nErdCJnuufS/Noppjr100LBRRLNpCP8CA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..0b0b04c4a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNz4CorvWXsmO3SY0y/2VpHRoX7MAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjQ3WhcNMjIwNzE2MTcyMjQ3WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EA2he/tpDvNnQkFIU6+yR1TCtOG3OXeJRTQg6Z8IR6 +nXMZST9kdR2BAs4N9C4TvmkkxGqKTmR6OJixknA49yH8AQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..5326659ec --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..414d55bfc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/gateways/rest-gateway/rest.json @@ -0,0 +1,91 @@ +{ + "network": { + "name": "privateTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..d773ff78a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..1dae20a17 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..9bd4c5ee4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..bcfeeadc4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..babb16be8 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..9b0e26062 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 4 + Voting Count: 0 + Voting Balance: 0 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: C66165AB756F6112CE9E430BAAC279997A3701304669FD57C5713AA70FCE96BE + Receipts Hash: A77BEEE3442A28982C353CAC63D9A7744EDC554EF9A832825818C45ECDED0117 + State Hash: 599C16A8EC8618706D46E036D9665F73357390E0B4B3FABF2E13D7E2C3214CA4 +--- Components (9) --- + + 7CED69CC30E7F7772AB57B3975BC950112630F94BDD127CA2BC47FD6DB47BD55 + + FBA6D331D6AC65369FBAF3C527AAC1B02EE9AFB3EE1CBBEDFCB5BC5279F8B432 + + D11FC31CBB5533C6D4F41765D11716F33B66C2452067C292CA16A590010F2590 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..50133bb2d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,46 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +cat = true +cat.currency = true + +[namespace>cat] + +duration = 0 + +[mosaics] + +cat:currency = true + +[mosaic>cat:currency] + +divisibility = 6 +duration = 0 +supply = 8'998'999'998'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>cat:currency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 4'449'499'999'000'000 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 2'249'749'999'500'000 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 2'249'749'999'500'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 50'000'000'000'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/transactions/remote_node.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/transactions/remote_node.bin new file mode 100644 index 000000000..5a1853570 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/transactions/remote_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/transactions/vrf_node.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/transactions/vrf_node.bin new file mode 100644 index 000000000..fb3a76804 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nemesis/transactions/vrf_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..5326659ec --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..9ac9f4e9c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRt/NU//CvPhQq+TVdkOKyxTF7+ajAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI0N1oXDTQxMDcwMTE3MjI0N1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAAJ77nrTz4YVs9B3rpgirXE8XsBHf +HgJf2BJyBWP1xHoTZZ2gUfiF1nErdCJnuufS/Noppjr100LBRRLNpCP8CA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..0b0b04c4a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNz4CorvWXsmO3SY0y/2VpHRoX7MAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjQ3WhcNMjIwNzE2MTcyMjQ3WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EA2he/tpDvNnQkFIU6+yR1TCtOG3OXeJRTQg6Z8IR6 +nXMZST9kdR2BAs4N9C4TvmkkxGqKTmR6OJixknA49yH8AQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..ee475206c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNz4CorvWXsmO3SY0y/2VpHRoX7MAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMjQ3WhcNMjIwNzE2MTcyMjQ3WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EA2he/tpDvNnQkFIU6+yR1TCtOG3OXeJRTQg6Z8IR6 +nXMZST9kdR2BAs4N9C4TvmkkxGqKTmR6OJixknA49yH8AQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRt/NU//CvPhQq+TVdkOKyxTF7+ajAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI0N1oXDTQxMDcwMTE3MjI0N1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAAJ77nrTz4YVs9B3rpgirXE8XsBHf +HgJf2BJyBWP1xHoTZZ2gUfiF1nErdCJnuufS/Noppjr100LBRRLNpCP8CA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..5326659ec --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/preset.yml new file mode 100644 index 000000000..297170911 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/preset.yml @@ -0,0 +1,347 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +totalChainImportance: 8998999998000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: cat +networkDescription: Symbol Local Bootstrap +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: currency + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 4449499999000000 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 2249749999500000 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 2249749999500000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 50000000000000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +faucetUrl: 'http://localhost:100' +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + host: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +wallets: + - + name: wallet + title: Symbol Bootstrap Wallet + openPort: '80' +explorers: + - + name: explorer + openPort: '90' + footer: + link: + - + href: 'https://nemflash.io/' + text: NEM News + icon: IconNewspaper + - + href: 'https://forum.nem.io/' + text: Forum + icon: IconForum + - + href: 'https://t.me/nemred' + text: Telegram + icon: IconTelegram + - + href: 'https://www.reddit.com/r/nem/' + text: Reddit + icon: IconReddit + - + href: 'https://github.com/nemtech' + text: Github + icon: IconGithub + - + href: 'http://localhost:100/' + text: Faucet + icon: IconHomeCurrencyUsd +faucets: + - + name: faucet + gateway: rest-gateway + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + openPort: '100' +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: singleCurrency +assembly: demo +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 5F54633454C3685B diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/reports/node-config.csv new file mode 100644 index 000000000..e846924b1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/reports/node-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; node; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/reports/node-config.rst new file mode 100644 index 000000000..47c18b6b6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/reports/node-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; node; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/app.conf.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/app.conf.js new file mode 100644 index 000000000..6277c735e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/app.conf.js @@ -0,0 +1,23 @@ +var appConfig = { + title: 'Symbol Bootstrap Wallet', + constants: { + EVENTS_THROTTLING_TIME: 6000, + MAX_LISTENER_RECONNECT_TRIES: 20, + MAX_PASSWORD_LENGTH: 64, + MAX_REMOTE_ACCOUNT_CHECKS: 10, + MAX_SEED_ACCOUNTS_NUMBER: 10, + MIN_PASSWORD_LENGTH: 8, + SEED_ACCOUNT_NAME_PREFIX: 'SeedWallet-', + ANNOUNCE_TRANSACTION_TIMEOUT: 240000, + DECIMAL_SEPARATOR: Number('1.1').toLocaleString().substring(1, 2), + }, + languages: [ + { value: 'en-US', label: 'English' }, + { value: 'zh-CN', label: '中文' }, + { value: 'ja-JP', label: '日本語' }, + ], + marketServerUrl: 'http://app.nemcn.io', + articlesFeedUrl: 'http://rssmix.com/u/11801188/rss.xml', +} +window.appConfig = appConfig +console.log('appConfig loaded!', appConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/fees.conf.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/fees.conf.js new file mode 100644 index 000000000..1a40c3f28 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/fees.conf.js @@ -0,0 +1,9 @@ +var feesConfig = { + median: 10, + free: 0, + slow: 5, + slowest: 1, + fast: 20, +} +window.feesConfig = feesConfig +console.log('feesConfig loaded!', feesConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/network.conf.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/network.conf.js new file mode 100644 index 000000000..a1d18b339 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/network.conf.js @@ -0,0 +1,37 @@ +var networkTypeConfig = { + "explorerUrl": "", + "faucetUrl": "http://localhost:100", + "defaultNetworkType": 168, + "defaultNodeUrl": "http://node:3000", + "networkConfigurationDefaults": { + "maxMosaicDivisibility": 6, + "namespaceGracePeriodDuration": 2592000, + "lockedFundsPerAggregate": "10000000", + "maxCosignatoriesPerAccount": 25, + "blockGenerationTargetTime": 15, + "maxNamespaceDepth": 3, + "maxMosaicDuration": 315360000, + "minNamespaceDuration": 60, + "maxNamespaceDuration": 31536000, + "maxTransactionsPerAggregate": 100, + "maxCosignedAccountsPerAccount": 25, + "maxMessageSize": 1024, + "maxMosaicAtomicUnits": 9000000000000000, + "currencyMosaicId": "5F54633454C3685B", + "harvestingMosaicId": "5F54633454C3685B", + "defaultDynamicFeeMultiplier": 1000, + "epochAdjustment": 1573430400, + "totalChainImportance": 8998999998000000, + "generationHash": "0000000000000000000000000000000000000000000000000000000000000CCC" + }, + "nodes": [ + {"friendlyName": "node", "roles": 2, "url": "http://node:3000"}, + ] +} +var networkConfig = { 168 : networkTypeConfig } +window.networkConfig = networkConfig +console.log('networkConfig loaded!', networkConfig) + + + + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/profileImporter.html b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/profileImporter.html new file mode 100644 index 000000000..bd0ee1add --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-demo-target/wallets/wallet/profileImporter.html @@ -0,0 +1,140 @@ + + + + + + Profile Importer + + + +

Profile Importer File Form

+ + +
+
+
+ + +
+ +

Profile Importer Text Form

+
+
+ +
+
+ Go back to the wallet + + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/addresses.yml new file mode 100644 index 000000000..eaaa9e013 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/addresses.yml @@ -0,0 +1,42 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: 'Peer,Api' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: VDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPAOKEA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: VDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4AMJVEA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: currency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/docker-compose.yml new file mode 100644 index 000000000..486c0e258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/docker-compose.yml @@ -0,0 +1,68 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..db3dc203e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQDY8KnJAIeZ5EJo+Jy6BYt8BRyqTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI1MloXDTQxMDcwMTE3MjI1MlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA9OCXzF0FUad9v5ng4yzdVJdKiFMV +nIHoFRJlpNbNEDjeWb3VUIgZznuhydy6iEoXSufdNQd1lPl8rD0Ead02Dg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..2b3b2a950 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQApPYXp0B5KSt6pHkNuM+Y0U5DjDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI1MloXDTIyMDcxNjE3MjI1MlowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBACzVAAtMznOVVrCzdhQ7PPHrsmHiAiDV59p6Qw/X +mc41Oi5NG6S2gnmKIaJcH/Oh0QyqQOn9Su+NUeLAc/EGwwc= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..d6e5b09d4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..414d55bfc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/gateways/rest-gateway/rest.json @@ -0,0 +1,91 @@ +{ + "network": { + "name": "privateTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..d773ff78a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..1dae20a17 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..9bd4c5ee4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..bcfeeadc4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..babb16be8 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..9b0e26062 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 4 + Voting Count: 0 + Voting Balance: 0 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: C66165AB756F6112CE9E430BAAC279997A3701304669FD57C5713AA70FCE96BE + Receipts Hash: A77BEEE3442A28982C353CAC63D9A7744EDC554EF9A832825818C45ECDED0117 + State Hash: 599C16A8EC8618706D46E036D9665F73357390E0B4B3FABF2E13D7E2C3214CA4 +--- Components (9) --- + + 7CED69CC30E7F7772AB57B3975BC950112630F94BDD127CA2BC47FD6DB47BD55 + + FBA6D331D6AC65369FBAF3C527AAC1B02EE9AFB3EE1CBBEDFCB5BC5279F8B432 + + D11FC31CBB5533C6D4F41765D11716F33B66C2452067C292CA16A590010F2590 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..50133bb2d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,46 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +cat = true +cat.currency = true + +[namespace>cat] + +duration = 0 + +[mosaics] + +cat:currency = true + +[mosaic>cat:currency] + +divisibility = 6 +duration = 0 +supply = 8'998'999'998'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>cat:currency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 4'449'499'999'000'000 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 2'249'749'999'500'000 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 2'249'749'999'500'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 50'000'000'000'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/transactions/remote_node.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/transactions/remote_node.bin new file mode 100644 index 000000000..5a1853570 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/transactions/remote_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/transactions/vrf_node.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/transactions/vrf_node.bin new file mode 100644 index 000000000..fb3a76804 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nemesis/transactions/vrf_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..d6e5b09d4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..db3dc203e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQDY8KnJAIeZ5EJo+Jy6BYt8BRyqTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI1MloXDTQxMDcwMTE3MjI1MlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA9OCXzF0FUad9v5ng4yzdVJdKiFMV +nIHoFRJlpNbNEDjeWb3VUIgZznuhydy6iEoXSufdNQd1lPl8rD0Ead02Dg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..2b3b2a950 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQApPYXp0B5KSt6pHkNuM+Y0U5DjDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI1MloXDTIyMDcxNjE3MjI1MlowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBACzVAAtMznOVVrCzdhQ7PPHrsmHiAiDV59p6Qw/X +mc41Oi5NG6S2gnmKIaJcH/Oh0QyqQOn9Su+NUeLAc/EGwwc= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..df491709d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQApPYXp0B5KSt6pHkNuM+Y0U5DjDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI1MloXDTIyMDcxNjE3MjI1MlowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBACzVAAtMznOVVrCzdhQ7PPHrsmHiAiDV59p6Qw/X +mc41Oi5NG6S2gnmKIaJcH/Oh0QyqQOn9Su+NUeLAc/EGwwc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQDY8KnJAIeZ5EJo+Jy6BYt8BRyqTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjI1MloXDTQxMDcwMTE3MjI1MlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA9OCXzF0FUad9v5ng4yzdVJdKiFMV +nIHoFRJlpNbNEDjeWb3VUIgZznuhydy6iEoXSufdNQd1lPl8rD0Ead02Dg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..d6e5b09d4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/preset.yml new file mode 100644 index 000000000..7aeaafeb4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/preset.yml @@ -0,0 +1,298 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +totalChainImportance: 8998999998000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: cat +networkDescription: Symbol Local Bootstrap +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: currency + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 4449499999000000 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 2249749999500000 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 2249749999500000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 50000000000000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: singleCurrency +assembly: dual +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +explorers: [] +wallets: [] +faucets: [] +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 5F54633454C3685B diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/reports/node-config.csv new file mode 100644 index 000000000..ccce77c99 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/reports/node-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/reports/node-config.rst new file mode 100644 index 000000000..2fa55bfbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-dual-target/reports/node-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/addresses.yml new file mode 100644 index 000000000..0794ba6e8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/addresses.yml @@ -0,0 +1,84 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: peer-node-0 + friendlyName: peer-node-0 + roles: 'Peer,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: VDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPAOKEA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: VDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4AMJVEA + voting: + - + publicKey: 675D847C23F181E8EA64A1DA926B99406C12155F630240622D26EBB9290A0B02 + startEpoch: 1 + endEpoch: 720 + filename: private_key_tree1.dat + - + name: peer-node-1 + friendlyName: peer-node-1 + roles: 'Peer,Voting' + main: + publicKey: F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8 + address: VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY + transport: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 404F4D08238867A2CBE61CB4D3AB5E6E8F69B6DBE80442025021F518B099BF8A + address: VAPMWPTZRETEQRNQ37UE72IAI4RHWXDH3DXJNBY + remote: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 3A6DF713A680D77EAF40BDD5DB1A701E52303BDC29314B9A0C00F17CF31B9AE4 + address: VCA7OHAAJTLWCIDAGOG4X5BTKBJRWMFLHGPFNAI + vrf: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: CF58C1A57E19B238B0D8DC1E74363C5BF399CF87251F4FF6A778B33946ADA34D + address: VC7B6MRPIOWQASLSHCXBKQ4ND4FH4TRGGYZQWYI + voting: + - + publicKey: 8AC4BCEE773D4D0511AC0D26BBB99A6D22A69E8BC20398AA03EA16640B5042EA + startEpoch: 1 + endEpoch: 720 + filename: private_key_tree1.dat + - + name: api-node-0 + friendlyName: api-node-0 + roles: Api + main: + publicKey: 65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2 + address: VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000BBBBB2 + publicKey: 051660FA2830C44E9DD2FD02A9E64A2878E013DEE5252B401D8B282D1C3A315D + address: VCNDEIWMTLC6R3KWMQOGHL7JMWGV5SYUTFO22MA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: currency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/docker-compose.yml new file mode 100644 index 000000000..9e7ee6b60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/docker-compose.yml @@ -0,0 +1,113 @@ +version: '2.4' +services: + db-0: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db-0 + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db-0 --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + ports: + - '27017:27017' + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db-0:/dbdata:rw' + peer-node-0: + user: '1000:1000' + container_name: peer-node-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-0 NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/peer-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - peer-node-0 + hostname: peer-node-0 + peer-node-1: + user: '1000:1000' + container_name: peer-node-1 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-1 NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7901:7900' + volumes: + - '../nodes/peer-node-1:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - peer-node-1 + hostname: peer-node-1 + api-node-0: + user: '1000:1000' + container_name: api-node-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-0 NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + volumes: + - '../nodes/api-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db-0 + - api-node-broker-0 + networks: + default: + aliases: + - api-node-0 + hostname: api-node-0 + api-node-broker-0: + user: '1000:1000' + container_name: api-node-broker-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-0 NORMAL + ports: + - '8002:7902' + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/api-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db-0 + rest-gateway-0: + container_name: rest-gateway-0 + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway-0:/symbol-workdir:rw' + depends_on: + - db-0 + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..2822d914f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH0MIGnAhQM9+V1lPnq8tMBLi5AJrkScsEE7jAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjI1OFoXDTQxMDcwMTE3MjI1 +OFowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EAPVMcFBZ3gpJV +zyylCQfPtObNWzAq626hSQnFTZsHY5QD0PviHBLUbFr1IgISpo55M7acySIio43A +UCUmxbl7CQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..3311eecd8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHsMIGfAhQAgAybjtHSywJdTfE1gBiCpzOQZTAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjI1OFoXDTIyMDcxNjE3MjI1 +OFowFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPooMMROndL9 +AqnmSih44BPe5SUrQB2LKC0cOjFdMAUGAytlcANBAEmcakBUIJP0nM60HYV4X85p +8/v8G0VZnfmMT50TNLZPO/iNYTEihbcnmmZFysgDqw6qCH+UiD6w2HMhysoCTw0= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..f99b069e0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7uy +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties new file mode 100644 index 000000000..8d73e1fbb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/rest.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/rest.json new file mode 100644 index 000000000..89aa42eac --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/gateways/rest-gateway-0/rest.json @@ -0,0 +1,91 @@ +{ + "network": { + "name": "privateTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer" + ], + "db": { + "url": "mongodb://db-0:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "api-node-0", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "api-node-broker-0", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..904a10a00 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..d0026fe88 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..9bd4c5ee4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..e355e0ddc Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..067263649 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..d2a0c5a21 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 6 + Voting Count: 2 + Voting Balance: 100000000000000 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: 806F1536902B1BD870C9C7115C2B6B9C0570950B6B077563F4FBC20F9AC673ED + Receipts Hash: A77BEEE3442A28982C353CAC63D9A7744EDC554EF9A832825818C45ECDED0117 + State Hash: 6384620396BA67D8DEF224C8AAFB446E7BDF4F8B85E89A736C053CFCBC4BF9F2 +--- Components (9) --- + + EBF31BC893A18569B7796E405F713F5DF1F562014C40BF5D9E8D449C2331AD5C + + FBA6D331D6AC65369FBAF3C527AAC1B02EE9AFB3EE1CBBEDFCB5BC5279F8B432 + + D11FC31CBB5533C6D4F41765D11716F33B66C2452067C292CA16A590010F2590 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..7af1ebfcb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,48 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +cat = true +cat.currency = true + +[namespace>cat] + +duration = 0 + +[mosaics] + +cat:currency = true + +[mosaic>cat:currency] + +divisibility = 6 +duration = 0 +supply = 8'998'999'998'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>cat:currency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 5'849'333'332'000'000 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 1'499'833'333'000'000 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 1'499'833'333'000'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 50'000'000'000'000 +VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY = 50'000'000'000'000 +VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI = 50'000'000'000'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/remote_peer-node-0.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/remote_peer-node-0.bin new file mode 100644 index 000000000..5a1853570 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/remote_peer-node-0.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/remote_peer-node-1.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/remote_peer-node-1.bin new file mode 100644 index 000000000..aa1be116a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/remote_peer-node-1.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/voting_peer-node-0.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/voting_peer-node-0.bin new file mode 100644 index 000000000..a1b045365 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/voting_peer-node-0.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/voting_peer-node-1.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/voting_peer-node-1.bin new file mode 100644 index 000000000..c7bbd9260 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/voting_peer-node-1.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/vrf_peer-node-0.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/vrf_peer-node-0.bin new file mode 100644 index 000000000..fb3a76804 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/vrf_peer-node-0.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/vrf_peer-node-1.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/vrf_peer-node-1.bin new file mode 100644 index 000000000..c4a172753 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nemesis/transactions/vrf_peer-node-1.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties new file mode 100644 index 000000000..7f0e9b10f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db-0:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties new file mode 100644 index 000000000..8d73e1fbb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..bf507f5d3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json @@ -0,0 +1,27 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/ca.cert.pem new file mode 100644 index 000000000..2822d914f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH0MIGnAhQM9+V1lPnq8tMBLi5AJrkScsEE7jAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjI1OFoXDTQxMDcwMTE3MjI1 +OFowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EAPVMcFBZ3gpJV +zyylCQfPtObNWzAq626hSQnFTZsHY5QD0PviHBLUbFr1IgISpo55M7acySIio43A +UCUmxbl7CQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/ca.cnf new file mode 100644 index 000000000..1c97ff643 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = api-node-0-account diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem new file mode 100644 index 000000000..0cd8270a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAZceH1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9I= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/metadata.yml new file mode 100644 index 000000000..81846081b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 051660FA2830C44E9DD2FD02A9E64A2878E013DEE5252B401D8B282D1C3A315D +mainPublicKey: 65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.cnf new file mode 100644 index 000000000..04488fc2e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = api-node-0 + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.crt.pem new file mode 100644 index 000000000..3311eecd8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHsMIGfAhQAgAybjtHSywJdTfE1gBiCpzOQZTAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjI1OFoXDTIyMDcxNjE3MjI1 +OFowFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPooMMROndL9 +AqnmSih44BPe5SUrQB2LKC0cOjFdMAUGAytlcANBAEmcakBUIJP0nM60HYV4X85p +8/v8G0VZnfmMT50TNLZPO/iNYTEihbcnmmZFysgDqw6qCH+UiD6w2HMhysoCTw0= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.csr.pem new file mode 100644 index 000000000..695c438fa --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGUMEgCAQAwFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPoo +MMROndL9AqnmSih44BPe5SUrQB2LKC0cOjFdoAAwBQYDK2VwA0EAnBJxE2GzcR1F +ZiV+P4NchhSxCZwKYs1BKGayBvP+M73+SD7HMjVvLl7PJ0dueARJlaJ4EmbDrYha +yxHPltGUCQ== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.full.crt.pem new file mode 100644 index 000000000..09a5e645a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.full.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIHsMIGfAhQAgAybjtHSywJdTfE1gBiCpzOQZTAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjI1OFoXDTIyMDcxNjE3MjI1 +OFowFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPooMMROndL9 +AqnmSih44BPe5SUrQB2LKC0cOjFdMAUGAytlcANBAEmcakBUIJP0nM60HYV4X85p +8/v8G0VZnfmMT50TNLZPO/iNYTEihbcnmmZFysgDqw6qCH+UiD6w2HMhysoCTw0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH0MIGnAhQM9+V1lPnq8tMBLi5AJrkScsEE7jAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjI1OFoXDTQxMDcwMTE3MjI1 +OFowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EAPVMcFBZ3gpJV +zyylCQfPtObNWzAq626hSQnFTZsHY5QD0PviHBLUbFr1IgISpo55M7acySIio43A +UCUmxbl7CQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.key.pem new file mode 100644 index 000000000..f99b069e0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7uy +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties new file mode 100644 index 000000000..7f0e9b10f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db-0:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties new file mode 100644 index 000000000..8d73e1fbb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..bf507f5d3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json @@ -0,0 +1,27 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/ca.cert.pem new file mode 100644 index 000000000..43f65e70a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQ9+w3oa3ZdWI+5sZcYQ8T58eKpqzAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIyNThaFw00MTA3MDExNzIy +NThaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0wLWFjY291bnQwKjAFBgMrZXADIQB+ +0cFNzVZE323rJZByp38wjbJLAR2aytrq1yZe/S0/RzAFBgMrZXADQQA4MWWPFyfD +xa/ovBDCNecdwW6IxxYOgJZRweN8obTpbjaTxWBF1KS19PeSxyK8XwSg3TVptgWr +5TV1gHtDZ40G +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/ca.cnf new file mode 100644 index 000000000..82efc4d8c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-0-account diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.cnf new file mode 100644 index 000000000..831a2d17f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-0 + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.crt.pem new file mode 100644 index 000000000..3e2cc405b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhMn886OuejLgLfqpgoRx3hhe+Y8MAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjI1OFoXDTIyMDcxNjE3MjI1 +OFowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn8k5EsqTO +oz8FWYWMLr8mAvilUMW92wtxAAxJmDAFBgMrZXADQQBWYFmLMXbaKHgywQp+vH0Q +OMiaBL7n3HIx1NwbDMI+i6ZQR9xFfIvT8TUwlVDUSIqUsR6Qftf7/f0NbSxfFV8L +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.csr.pem new file mode 100644 index 000000000..e5d6fef03 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGVMEkCAQAwFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn +8k5EsqTOoz8FWYWMLr8mAvilUMW92wtxAAxJmKAAMAUGAytlcANBAM/u7hnlO8Fc +fvqI6Cp8WcabjiTW6njd4v+ikUsrOgXnoSIAsl0FUp98QiNHkC9lHZFClW2vm0LX +2xKxaRlK5w4= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem new file mode 100644 index 000000000..d2f3e6463 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhMn886OuejLgLfqpgoRx3hhe+Y8MAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjI1OFoXDTIyMDcxNjE3MjI1 +OFowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn8k5EsqTO +oz8FWYWMLr8mAvilUMW92wtxAAxJmDAFBgMrZXADQQBWYFmLMXbaKHgywQp+vH0Q +OMiaBL7n3HIx1NwbDMI+i6ZQR9xFfIvT8TUwlVDUSIqUsR6Qftf7/f0NbSxfFV8L +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQ9+w3oa3ZdWI+5sZcYQ8T58eKpqzAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIyNThaFw00MTA3MDExNzIy +NThaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0wLWFjY291bnQwKjAFBgMrZXADIQB+ +0cFNzVZE323rJZByp38wjbJLAR2aytrq1yZe/S0/RzAFBgMrZXADQQA4MWWPFyfD +xa/ovBDCNecdwW6IxxYOgJZRweN8obTpbjaTxWBF1KS19PeSxyK8XwSg3TVptgWr +5TV1gHtDZ40G +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..bc1afb502 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties new file mode 100644 index 000000000..6ba442ba3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = peer-node-0 +friendlyName = peer-node-0 +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json new file mode 100644 index 000000000..9719af8d9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2", + "endpoint": { + "host": "api-node-0", + "port": 7900 + }, + "metadata": { + "name": "api-node-0", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..bf1ef2889 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..43bf6f3b5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/ca.cert.pem new file mode 100644 index 000000000..6826546b1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQxs7pP2OvYxO8r00ko+XUKZjiJEjAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIyNTdaFw00MTA3MDExNzIy +NTdaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0xLWFjY291bnQwKjAFBgMrZXADIQD4 +4NlAAllAcZQdq4GsRVQ5CT1K4LDcxF7jazCmHx0suDAFBgMrZXADQQDp25v9xe63 +YZO9m51Ywtz9wOqR2zlUTNFezyYy19Yb2290N1IfnkF+shP/aeGnyoCEKSA8P6cY +ybLF4Pk3PRYH +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/ca.cnf new file mode 100644 index 000000000..d771d6d2f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-1-account diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem new file mode 100644 index 000000000..ed75563ae --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEA+ODZQAJZQHGUHauBrEVUOQk9SuCw3MRe42swph8dLLg= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/metadata.yml new file mode 100644 index 000000000..83cf1581d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 404F4D08238867A2CBE61CB4D3AB5E6E8F69B6DBE80442025021F518B099BF8A +mainPublicKey: F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.cnf new file mode 100644 index 000000000..cfd4a8a75 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-1 + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.crt.pem new file mode 100644 index 000000000..26b28f5b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.crt.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIHuMIGhAhQA7UKDYj3GWFWWeF+fUfOC1oo23DAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIyNTdaFw0yMjA3MTYxNzIy +NTdaMBYxFDASBgNVBAMMC3BlZXItbm9kZS0xMCowBQYDK2VwAyEAQE9NCCOIZ6LL +5hy006tebo9pttvoBEICUCH1GLCZv4owBQYDK2VwA0EAL+l46bZQXlKMRPkfeq4U +EVUIo0/ejrqBN55qaRHDQ7dHz5XQYkuR7EzJiytl9McDa0DD0sAbSZm4i8DBhMOD +Bg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.csr.pem new file mode 100644 index 000000000..242155349 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGVMEkCAQAwFjEUMBIGA1UEAwwLcGVlci1ub2RlLTEwKjAFBgMrZXADIQBAT00I +I4hnosvmHLTTq15uj2m22+gEQgJQIfUYsJm/iqAAMAUGAytlcANBAGnB/L4O415m +MlD4wzlzH8g+mtHT/16Ca5USb4VK5yVOpe6qvOF0npB3X4/vRLeSldTIiRHqgsTS +vmKepVDfpwM= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem new file mode 100644 index 000000000..903ed884b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIHuMIGhAhQA7UKDYj3GWFWWeF+fUfOC1oo23DAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIyNTdaFw0yMjA3MTYxNzIy +NTdaMBYxFDASBgNVBAMMC3BlZXItbm9kZS0xMCowBQYDK2VwAyEAQE9NCCOIZ6LL +5hy006tebo9pttvoBEICUCH1GLCZv4owBQYDK2VwA0EAL+l46bZQXlKMRPkfeq4U +EVUIo0/ejrqBN55qaRHDQ7dHz5XQYkuR7EzJiytl9McDa0DD0sAbSZm4i8DBhMOD +Bg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQxs7pP2OvYxO8r00ko+XUKZjiJEjAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIyNTdaFw00MTA3MDExNzIy +NTdaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0xLWFjY291bnQwKjAFBgMrZXADIQD4 +4NlAAllAcZQdq4GsRVQ5CT1K4LDcxF7jazCmHx0suDAFBgMrZXADQQDp25v9xe63 +YZO9m51Ywtz9wOqR2zlUTNFezyYy19Yb2290N1IfnkF+shP/aeGnyoCEKSA8P6cY +ybLF4Pk3PRYH +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.key.pem new file mode 100644 index 000000000..f2722b855 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..bc1afb502 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..f88dc0bff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 1000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 1000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties new file mode 100644 index 000000000..db6cc0e4c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = peer-node-1 +friendlyName = peer-node-1 +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json new file mode 100644 index 000000000..9719af8d9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2", + "endpoint": { + "host": "api-node-0", + "port": 7900 + }, + "metadata": { + "name": "api-node-0", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..7f8526360 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json @@ -0,0 +1,16 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..d65186143 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/preset.yml new file mode 100644 index 000000000..9c2321b2f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/preset.yml @@ -0,0 +1,338 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +totalChainImportance: 8998999998000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: cat +networkDescription: Symbol Local Bootstrap +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: currency + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 5849333332000000 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 1499833333000000 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 1499833333000000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 50000000000000 + - + address: VCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KCG3WSY + amount: 50000000000000 + - + address: VDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA2YE7UMI + amount: 50000000000000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +explorerUrl: 'http://localhost:90' +faucetUrl: 'http://localhost:100' +databases: + - + name: db-0 + openPort: '27017' +nodes: + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + voting: true + api: false + name: peer-node-0 + friendlyName: peer-node-0 + host: peer-node-0 + openPort: '7900' + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + voting: true + api: false + name: peer-node-1 + friendlyName: peer-node-1 + host: peer-node-1 + openPort: '7901' + - + syncsource: false + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: false + api: true + friendlyName: api-node-0 + name: api-node-0 + host: api-node-0 + brokerName: api-node-broker-0 + brokerOpenPort: '8002' + databaseHost: db-0 + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + apiNodeName: api-node-0 + apiNodeHost: api-node-0 + apiNodeBrokerHost: api-node-broker-0 + name: rest-gateway-0 + description: '' + databaseHost: db-0 + openPort: '3000' + ipv4_address: 172.20.0.25 +wallets: [] +explorers: [] +faucets: [] +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: singleCurrency +assembly: multinode +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 5F54633454C3685B diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/api-node-0-config.csv b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/api-node-0-config.csv new file mode 100644 index 000000000..df3501298 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/api-node-0-config.csv @@ -0,0 +1,434 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db-0:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; false +extension.syncsource; false +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; api-node-0; string; Node host (leave empty to auto-detect IP). +friendlyName; api-node-0; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/api-node-0-config.rst b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/api-node-0-config.rst new file mode 100644 index 000000000..93897d997 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/api-node-0-config.rst @@ -0,0 +1,453 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db-0:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; false + extension.syncsource; false + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; api-node-0; string; Node host (leave empty to auto-detect IP). + friendlyName; api-node-0; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-0-config.csv b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-0-config.csv new file mode 100644 index 000000000..6b57359e8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-0-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; peer-node-0; string; Node host (leave empty to auto-detect IP). +friendlyName; peer-node-0; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-0-config.rst b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-0-config.rst new file mode 100644 index 000000000..304770278 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-0-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; peer-node-0; string; Node host (leave empty to auto-detect IP). + friendlyName; peer-node-0; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-1-config.csv b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-1-config.csv new file mode 100644 index 000000000..6b819b054 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-1-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; peer-node-1; string; Node host (leave empty to auto-detect IP). +friendlyName; peer-node-1; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-1-config.rst b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-1-config.rst new file mode 100644 index 000000000..963ca1330 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-multinode-target/reports/peer-node-1-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; peer-node-1; string; Node host (leave empty to auto-detect IP). + friendlyName; peer-node-1; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/addresses.yml new file mode 100644 index 000000000..e739a358a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/addresses.yml @@ -0,0 +1,42 @@ +version: 2 +networkType: 168 +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: Peer + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: VBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6QK7STA + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: VDYBCGC2IHGHEPURL6P62N46JTDMBHGXQPAOKEA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: VDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4AMJVEA +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000AAAA + publicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C + address: VCPRGM4Y3T7ATDVI56XWBGNK6ZTHZRCDZYAF35Y +mosaics: + - + id: 5F54633454C3685B + name: currency + accounts: + - + publicKey: A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + - + publicKey: B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + - + publicKey: F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/docker-compose.yml new file mode 100644 index 000000000..963e7712d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2.4' +services: + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..d773ff78a Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..1dae20a17 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..9bd4c5ee4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..bcfeeadc4 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..babb16be8 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/summary.txt b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..9b0e26062 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 4 + Voting Count: 0 + Voting Balance: 0 +* + Generation Hash: 12147250C9A969D833911F0525F69AF5C497A9E55A645A5090FB9D71000A010E +Transactions Hash: C66165AB756F6112CE9E430BAAC279997A3701304669FD57C5713AA70FCE96BE + Receipts Hash: A77BEEE3442A28982C353CAC63D9A7744EDC554EF9A832825818C45ECDED0117 + State Hash: 599C16A8EC8618706D46E036D9665F73357390E0B4B3FABF2E13D7E2C3214CA4 +--- Components (9) --- + + 7CED69CC30E7F7772AB57B3975BC950112630F94BDD127CA2BC47FD6DB47BD55 + + FBA6D331D6AC65369FBAF3C527AAC1B02EE9AFB3EE1CBBEDFCB5BC5279F8B432 + + D11FC31CBB5533C6D4F41765D11716F33B66C2452067C292CA16A590010F2590 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/server-config/block-properties-file.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..50133bb2d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,46 @@ +[nemesis] + +networkIdentifier = private-test +nemesisGenerationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000AAAA + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +cat = true +cat.currency = true + +[namespace>cat] + +duration = 0 + +[mosaics] + +cat:currency = true + +[mosaic>cat:currency] + +divisibility = 6 +duration = 0 +supply = 8'998'999'998'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>cat:currency] +VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY = 4'449'499'999'000'000 +VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA = 2'249'749'999'500'000 +VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI = 2'249'749'999'500'000 +VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI = 50'000'000'000'000 + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/transactions/remote_node.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/transactions/remote_node.bin new file mode 100644 index 000000000..5a1853570 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/transactions/remote_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/transactions/vrf_node.bin b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/transactions/vrf_node.bin new file mode 100644 index 000000000..fb3a76804 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nemesis/transactions/vrf_node.bin differ diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..93fd64c37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQuAHL8ZUt+67KCIKB3rENjf8iC7jAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMwNFoXDTQxMDcwMTE3MjMwNFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAd15if2BNCzN9vGk0XLk0SBynnYir +UgbIgw8cZVEh/oiO+kuRGhfMB/+PvY5x0bh8JfmOC8NWeM2l75UAEsEWDA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..83eaa35ce --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMwtwPa/U+WUW4Xzo9M8Y2/H24eMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzA0WhcNMjIwNzE2MTcyMzA0WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAUhmdZwuaw5EmgRRcSe74wu3iGRVEO7ASBNjNIhPV +hYKUdw7moAqUxboKakOPvEnpKABlKGYYu6Yt3GItYqxWDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..65621bd71 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMwtwPa/U+WUW4Xzo9M8Y2/H24eMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzA0WhcNMjIwNzE2MTcyMzA0WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAUhmdZwuaw5EmgRRcSe74wu3iGRVEO7ASBNjNIhPV +hYKUdw7moAqUxboKakOPvEnpKABlKGYYu6Yt3GItYqxWDQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQuAHL8ZUt+67KCIKB3rENjf8iC7jAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMwNFoXDTQxMDcwMTE3MjMwNFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAd15if2BNCzN9vGk0XLk0SBynnYir +UgbIgw8cZVEh/oiO+kuRGhfMB/+PvY5x0bh8JfmOC8NWeM2l75UAEsEWDA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..5480ed29e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = true + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 8m diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..89879a441 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..4d21e55a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,4 @@ +[inflation] + +starting-at-height-1 = 0 +starting-at-height-10000 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..bf36c2fbe --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private-test +nemesisSignerPublicKey = 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +nodeEqualityStrategy = host +generationHashSeed = 0000000000000000000000000000000000000000000000000000000000000CCC +epochAdjustment = 1573430400s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x5F54'6334'54C3'685B +harvestingMosaicId = 0x5F54'6334'54C3'685B + +blockGenerationTargetTime = 15s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 1'000 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 500ms + +initialCurrencyAtomicUnits = 8'998'999'998'000'000 +maxMosaicAtomicUnits = 9'000'000'000'000'000 + +totalChainImportance = 8'998'999'998'000'000 +minHarvesterBalance = 500 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 50'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 180 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 26280 + +harvestBeneficiaryPercentage = 10 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 30d +minProofSize = 20 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFee = 500 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 256 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 1m +maxNamespaceDuration = 365d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +rootNamespaceRentalFeePerBlock = 1 +childNamespaceRentalFee = 100 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 512 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..0280886a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 1 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 20m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..bdad33cd1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 3'750 diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..228905eaf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/preset.yml new file mode 100644 index 000000000..b7e6061d4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/preset.yml @@ -0,0 +1,281 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 8998999998000000 +maxMosaicAtomicUnits: 9000000000000000 +totalChainImportance: 8998999998000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 50000 +blockGenerationTargetTime: 15s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 500ms +maxNamespaceDuration: 365d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 512 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 1000 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1573430400s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 26280 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500 +votingSetGrouping: 180 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 10 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 1 +childNamespaceRentalFee: 100 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 1m +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 30d +minProofSize: 20 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 256 +maxNamespaceDepth: 3 +batchVerificationRandomSource: null +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: true +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 8m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 3750 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 20m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 1 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +restDeploymentTool: symbol-bootstrap +networkType: 168 +baseNamespace: cat +networkDescription: Symbol Local Bootstrap +beneficiaryAddress: '' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +nemesis: + mosaics: + - + name: currency + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + currencyDistributions: + - + address: VAR4H3YL2TUBLRYZGXUB47FIHWXVJ64USKYFIXY + amount: 4449499999000000 + - + address: VA75J5YLC4YAQYJ4VGJKHBP4H6QBCMDLCKRWYTA + amount: 2249749999500000 + - + address: VCTUWEZQJUPOUBEVVKFES2DICKGFXJP3YV66AEI + amount: 2249749999500000 + - + address: VCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4SVXPAI + amount: 50000000000000 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 +nodes: + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + api: false + name: node + openPort: true +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +version: 1 +preset: singleCurrency +assembly: peer +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + networkType: 168 + nemesis: + mosaics: + - + accounts: + - A513E30C7F65275B0EFBB044D7512795756014E3ACADEE8534831A8B193543FF + - B9B9DD3A31D5A028924C624A82840F1752CB7C99946851B04ED51ED8E4A9825F + - F82E542C09421C6F8CDD3013D584EB75D3CF73EB4A110B62459A0FC7856926A8 + sinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ + nemesisGenerationHashSeed: 0000000000000000000000000000000000000000000000000000000000000CCC +databases: [] +gateways: [] +explorers: [] +wallets: [] +faucets: [] +harvestNetworkFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +mosaicRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +namespaceRentalFeeSinkAddress: VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ +networkIdentifier: private-test +networkName: privateTest +nemesisSignerPublicKey: 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C +currencyMosaicId: 5F54633454C3685B +harvestingMosaicId: 5F54633454C3685B diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/reports/node-config.csv new file mode 100644 index 000000000..ca3e23ac8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/reports/node-config.csv @@ -0,0 +1,444 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; true +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 8m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-1; 0 +starting-at-height-10000; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; +epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 180; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 20; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 1; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 3'750 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/reports/node-config.rst new file mode 100644 index 000000000..f1a619564 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/singleCurrency-peer-target/reports/node-config.rst @@ -0,0 +1,467 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; true + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 8m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-1; 0 + starting-at-height-10000; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 8619CFA41CD1DDAB7DDA2723C02AECA8F46FEF2EE89944CD251A188FFE5D151C; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 0000000000000000000000000000000000000000000000000000000000000CCC; ; + epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x5F54'6334'54C3'685B; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 8'998'999'998'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 180; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 20; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; VBZ43ZAOF6E62PAPIFTXJE4DZHY4Z6B4KGV5MSQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 1; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 3'750 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/addresses.yml new file mode 100644 index 000000000..92e5b0459 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/addresses.yml @@ -0,0 +1,15 @@ +version: 2 +networkType: 152 +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: Api + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: TBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TBUWTY diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/docker-compose.yml new file mode 100644 index 000000000..486c0e258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/docker-compose.yml @@ -0,0 +1,68 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..deb216484 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQwkEJ3QoD75nJFvX7/Tl4YAx0v/zAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMwOVoXDTQxMDcwMTE3MjMwOVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAU8TmrggYOK0DFAOV+6RN2NMidL3v +Es2odMC1NBxYHivLL47ajl6111p1cXdvppZ+U0jDmrBM183+bhV4Vv0fAg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..5d920abc7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMr0zpYhWaGqysBagmchAA3y+OuMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzA5WhcNMjIwNzE2MTcyMzA5WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAHY5kizVAn4mmkUGZUaBwPFNVZ9Bk3WahX23Jd1LR ++wGfwRJjuoHIoGWWC4JThS4iAg/kdTs1+nN16vmoboZeAw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..635b187b1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..73affe258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "publicTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..57b338cb5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6848fd5d1 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..905416151 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..9daa77117 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..28ed919f7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..1feee6a11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..635b187b1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..deb216484 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQwkEJ3QoD75nJFvX7/Tl4YAx0v/zAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMwOVoXDTQxMDcwMTE3MjMwOVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAU8TmrggYOK0DFAOV+6RN2NMidL3v +Es2odMC1NBxYHivLL47ajl6111p1cXdvppZ+U0jDmrBM183+bhV4Vv0fAg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..5d920abc7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMr0zpYhWaGqysBagmchAA3y+OuMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzA5WhcNMjIwNzE2MTcyMzA5WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAHY5kizVAn4mmkUGZUaBwPFNVZ9Bk3WahX23Jd1LR ++wGfwRJjuoHIoGWWC4JThS4iAg/kdTs1+nN16vmoboZeAw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..ef4e33dde --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMr0zpYhWaGqysBagmchAA3y+OuMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzA5WhcNMjIwNzE2MTcyMzA5WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAHY5kizVAn4mmkUGZUaBwPFNVZ9Bk3WahX23Jd1LR ++wGfwRJjuoHIoGWWC4JThS4iAg/kdTs1+nN16vmoboZeAw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQwkEJ3QoD75nJFvX7/Tl4YAx0v/zAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMwOVoXDTQxMDcwMTE3MjMwOVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAU8TmrggYOK0DFAOV+6RN2NMidL3v +Es2odMC1NBxYHivLL47ajl6111p1cXdvppZ+U0jDmrBM183+bhV4Vv0fAg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..1feee6a11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..635b187b1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/preset.yml new file mode 100644 index 000000000..bd48d48e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/preset.yml @@ -0,0 +1,912 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 1d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1616694977s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 720 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500000 +votingSetGrouping: 720 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +assemblies: 'api, dual, peer' +networkDescription: Symbol Testnet +baseNamespace: symbol +currencyMosaicId: 091F837E059AE13C +harvestingMosaicId: 091F837E059AE13C +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA +namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +networkType: 152 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ +rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 311 +faucetUrl: 'http://faucet.testnet.symboldev.network' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-501.testnet.symboldev.network:3000' + - 'http://ngl-dual-601.testnet.symboldev.network:3000' + - 'http://ngl-dual-001.testnet.symboldev.network:3000' + - 'http://ngl-dual-101.testnet.symboldev.network:3000' + - 'http://ngl-dual-201.testnet.symboldev.network:3000' + - 'http://ngl-dual-301.testnet.symboldev.network:3000' + - 'http://ngl-dual-401.testnet.symboldev.network:3000' + - 'http://ngl-dual-502.testnet.symboldev.network:3000' + - 'http://ngl-dual-602.testnet.symboldev.network:3000' + - 'http://ngl-api-001.testnet.symboldev.network:3000' + - 'http://ngl-api-101.testnet.symboldev.network:3000' +knownPeers: + api-node: + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api + peer-node: + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: false + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: false + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: testnet +assembly: api +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public-test +networkName: publicTest diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/reports/node-config.csv new file mode 100644 index 000000000..c96f2fba7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/reports/node-config.csv @@ -0,0 +1,855 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; false +extension.syncsource; false +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-api-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/reports/node-config.rst new file mode 100644 index 000000000..d50c8d860 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-api-target/reports/node-config.rst @@ -0,0 +1,874 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; false + extension.syncsource; false + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/addresses.yml new file mode 100644 index 000000000..4f5d9305e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/addresses.yml @@ -0,0 +1,23 @@ +version: 2 +networkType: 152 +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: 'Peer,Api' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: TBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TBUWTY + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: TDYBCGC2IHGHEPURL6P62N46JTDMBHGXQNXQYJA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: TDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4CWJJNI diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/docker-compose.yml new file mode 100644 index 000000000..451f6c4ea --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/docker-compose.yml @@ -0,0 +1,117 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - node + hostname: node + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 + wallet: + container_name: wallet + image: 'symbolplatform/symbol-desktop-wallet:1.0.1' + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '80:80' + restart: 'on-failure:2' + volumes: + - '../wallets/wallet:/usr/share/nginx/html/config:ro' + explorer: + container_name: explorer + image: 'symbolplatform/symbol-explorer:1.1.0-alpha' + entrypoint: ash -c "/bin/ash /symbol-commands/run.sh explorer" + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '90:4000' + restart: 'on-failure:2' + volumes: + - '../explorers/explorer:/symbol-workdir:ro' + - './explorer:/symbol-commands:ro' + faucet: + container_name: faucet + image: 'symbolplatform/symbol-faucet:1.0.1-alpha' + stop_signal: SIGINT + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + NATIVE_CURRENCY_NAME: symbol.xym + FAUCET_PRIVATE_KEY: '' + NATIVE_CURRENCY_ID: 091F837E059AE13C + restart: 'on-failure:2' + ports: + - '100:4000' + depends_on: + - rest-gateway +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/explorers/explorer/default.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/explorers/explorer/default.json new file mode 100644 index 000000000..170a9e551 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/explorers/explorer/default.json @@ -0,0 +1,63 @@ +{ + "peersApi": { + "defaultNode": "http://node:3000", + "nodes": [ + "http://node:3000", + "http://ngl-dual-501.testnet.symboldev.network:3000", + "http://ngl-dual-601.testnet.symboldev.network:3000", + "http://ngl-dual-001.testnet.symboldev.network:3000", + "http://ngl-dual-101.testnet.symboldev.network:3000", + "http://ngl-dual-201.testnet.symboldev.network:3000", + "http://ngl-dual-301.testnet.symboldev.network:3000", + "http://ngl-dual-401.testnet.symboldev.network:3000", + "http://ngl-dual-502.testnet.symboldev.network:3000", + "http://ngl-dual-602.testnet.symboldev.network:3000", + "http://ngl-api-001.testnet.symboldev.network:3000", + "http://ngl-api-101.testnet.symboldev.network:3000" + ] + }, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "symbol.xym", + "mosaicId": "091F837E059AE13C", + "divisibility": "6", + "namespaceId": "E74B99BA41F4AFEE", + "networkIdentifier": 152 + }, + "footer": { + "link": [ + { + "href": "https://nemflash.io/", + "text": "NEM News", + "icon": "IconNewspaper" + }, + { + "href": "https://forum.nem.io/", + "text": "Forum", + "icon": "IconForum" + }, + { + "href": "https://t.me/nemred", + "text": "Telegram", + "icon": "IconTelegram" + }, + { + "href": "https://www.reddit.com/r/nem/", + "text": "Reddit", + "icon": "IconReddit" + }, + { + "href": "https://github.com/nemtech", + "text": "Github", + "icon": "IconGithub" + }, + { + "href": "http://localhost:100/", + "text": "Faucet", + "icon": "IconHomeCurrencyUsd" + } + ] + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..51608ea33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQuTZt61eHokFyeiEcVYhKpJH9FkzAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxMVoXDTQxMDcwMTE3MjMxMVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAaToEKhtFG/ybRj1PE95ub6nxwGnd +2E+awxpCOPcXvfjJJaMKmtjn2ZM3ERGBw51BKmq9syr0oQCD6qg3hb2wDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..8e221b4ae --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMmMqL7zzi5xEWFQbu9i62vzK7TMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzExWhcNMjIwNzE2MTcyMzExWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAV0st8MjBBK0Or5ycU9tiUk5pTwZOWlivFdZIUvJk +fN1Ch0B/D+hjmkCeSYhUyTkqSEUKVcNIwo+WmTW6k8FTCA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..3fcfa858b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..73affe258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "publicTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..57b338cb5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6848fd5d1 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..905416151 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..9daa77117 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..28ed919f7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..1feee6a11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..3fcfa858b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..51608ea33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQuTZt61eHokFyeiEcVYhKpJH9FkzAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxMVoXDTQxMDcwMTE3MjMxMVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAaToEKhtFG/ybRj1PE95ub6nxwGnd +2E+awxpCOPcXvfjJJaMKmtjn2ZM3ERGBw51BKmq9syr0oQCD6qg3hb2wDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..8e221b4ae --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMmMqL7zzi5xEWFQbu9i62vzK7TMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzExWhcNMjIwNzE2MTcyMzExWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAV0st8MjBBK0Or5ycU9tiUk5pTwZOWlivFdZIUvJk +fN1Ch0B/D+hjmkCeSYhUyTkqSEUKVcNIwo+WmTW6k8FTCA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..f6f3dc6ef --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMmMqL7zzi5xEWFQbu9i62vzK7TMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzExWhcNMjIwNzE2MTcyMzExWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAV0st8MjBBK0Or5ycU9tiUk5pTwZOWlivFdZIUvJk +fN1Ch0B/D+hjmkCeSYhUyTkqSEUKVcNIwo+WmTW6k8FTCA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQuTZt61eHokFyeiEcVYhKpJH9FkzAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxMVoXDTQxMDcwMTE3MjMxMVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAaToEKhtFG/ybRj1PE95ub6nxwGnd +2E+awxpCOPcXvfjJJaMKmtjn2ZM3ERGBw51BKmq9syr0oQCD6qg3hb2wDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..1feee6a11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..3fcfa858b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = node +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/preset.yml new file mode 100644 index 000000000..fa0a4a3aa --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/preset.yml @@ -0,0 +1,960 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 1d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1616694977s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 720 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500000 +votingSetGrouping: 720 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +assemblies: 'api, dual, peer' +networkDescription: Symbol Testnet +baseNamespace: symbol +currencyMosaicId: 091F837E059AE13C +harvestingMosaicId: 091F837E059AE13C +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA +namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +networkType: 152 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ +rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 311 +faucetUrl: 'http://localhost:100' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-501.testnet.symboldev.network:3000' + - 'http://ngl-dual-601.testnet.symboldev.network:3000' + - 'http://ngl-dual-001.testnet.symboldev.network:3000' + - 'http://ngl-dual-101.testnet.symboldev.network:3000' + - 'http://ngl-dual-201.testnet.symboldev.network:3000' + - 'http://ngl-dual-301.testnet.symboldev.network:3000' + - 'http://ngl-dual-401.testnet.symboldev.network:3000' + - 'http://ngl-dual-502.testnet.symboldev.network:3000' + - 'http://ngl-dual-602.testnet.symboldev.network:3000' + - 'http://ngl-api-001.testnet.symboldev.network:3000' + - 'http://ngl-api-101.testnet.symboldev.network:3000' +knownPeers: + api-node: + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api + peer-node: + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + host: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +wallets: + - + name: wallet + title: Symbol Bootstrap Wallet + openPort: '80' +explorers: + - + name: explorer + openPort: '90' + footer: + link: + - + href: 'https://nemflash.io/' + text: NEM News + icon: IconNewspaper + - + href: 'https://forum.nem.io/' + text: Forum + icon: IconForum + - + href: 'https://t.me/nemred' + text: Telegram + icon: IconTelegram + - + href: 'https://www.reddit.com/r/nem/' + text: Reddit + icon: IconReddit + - + href: 'https://github.com/nemtech' + text: Github + icon: IconGithub + - + href: 'http://localhost:100/' + text: Faucet + icon: IconHomeCurrencyUsd +faucets: + - + name: faucet + gateway: rest-gateway + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + openPort: '100' +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: testnet +assembly: demo +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} +networkIdentifier: public-test +networkName: publicTest diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/reports/node-config.csv new file mode 100644 index 000000000..8b84fb883 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; node; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/reports/node-config.rst new file mode 100644 index 000000000..ced003414 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; node; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/app.conf.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/app.conf.js new file mode 100644 index 000000000..6277c735e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/app.conf.js @@ -0,0 +1,23 @@ +var appConfig = { + title: 'Symbol Bootstrap Wallet', + constants: { + EVENTS_THROTTLING_TIME: 6000, + MAX_LISTENER_RECONNECT_TRIES: 20, + MAX_PASSWORD_LENGTH: 64, + MAX_REMOTE_ACCOUNT_CHECKS: 10, + MAX_SEED_ACCOUNTS_NUMBER: 10, + MIN_PASSWORD_LENGTH: 8, + SEED_ACCOUNT_NAME_PREFIX: 'SeedWallet-', + ANNOUNCE_TRANSACTION_TIMEOUT: 240000, + DECIMAL_SEPARATOR: Number('1.1').toLocaleString().substring(1, 2), + }, + languages: [ + { value: 'en-US', label: 'English' }, + { value: 'zh-CN', label: '中文' }, + { value: 'ja-JP', label: '日本語' }, + ], + marketServerUrl: 'http://app.nemcn.io', + articlesFeedUrl: 'http://rssmix.com/u/11801188/rss.xml', +} +window.appConfig = appConfig +console.log('appConfig loaded!', appConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/fees.conf.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/fees.conf.js new file mode 100644 index 000000000..1a40c3f28 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/fees.conf.js @@ -0,0 +1,9 @@ +var feesConfig = { + median: 10, + free: 0, + slow: 5, + slowest: 1, + fast: 20, +} +window.feesConfig = feesConfig +console.log('feesConfig loaded!', feesConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/network.conf.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/network.conf.js new file mode 100644 index 000000000..9efc50e02 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/network.conf.js @@ -0,0 +1,48 @@ +var networkTypeConfig = { + "explorerUrl": "", + "faucetUrl": "http://localhost:100", + "defaultNetworkType": 152, + "defaultNodeUrl": "http://node:3000", + "networkConfigurationDefaults": { + "maxMosaicDivisibility": 6, + "namespaceGracePeriodDuration": 86400, + "lockedFundsPerAggregate": "10000000", + "maxCosignatoriesPerAccount": 25, + "blockGenerationTargetTime": 30, + "maxNamespaceDepth": 3, + "maxMosaicDuration": 315360000, + "minNamespaceDuration": 2592000, + "maxNamespaceDuration": 157680000, + "maxTransactionsPerAggregate": 100, + "maxCosignedAccountsPerAccount": 25, + "maxMessageSize": 1024, + "maxMosaicAtomicUnits": 8999999999000000, + "currencyMosaicId": "091F837E059AE13C", + "harvestingMosaicId": "091F837E059AE13C", + "defaultDynamicFeeMultiplier": 100, + "epochAdjustment": 1616694977, + "totalChainImportance": 7842928625000000, + "generationHash": "3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155" + }, + "nodes": [ + {"friendlyName": "node", "roles": 2, "url": "http://node:3000"}, + {"friendlyName": "ngl-dual-501.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-501.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-601.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-601.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-001.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-001.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-101.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-101.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-201.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-201.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-301.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-301.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-401.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-401.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-502.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-502.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-602.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-602.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-api-001.testnet.symboldev.network", "roles": 2, "url": "http://ngl-api-001.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-api-101.testnet.symboldev.network", "roles": 2, "url": "http://ngl-api-101.testnet.symboldev.network:3000"}, + ] +} +var networkConfig = { 152 : networkTypeConfig } +window.networkConfig = networkConfig +console.log('networkConfig loaded!', networkConfig) + + + + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/profileImporter.html b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/profileImporter.html new file mode 100644 index 000000000..bd0ee1add --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-target/wallets/wallet/profileImporter.html @@ -0,0 +1,140 @@ + + + + + + Profile Importer + + + +

Profile Importer File Form

+ + +
+
+
+ + +
+ +

Profile Importer Text Form

+
+
+ +
+
+ Go back to the wallet + + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/addresses.yml new file mode 100644 index 000000000..9ad0b60ce --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/addresses.yml @@ -0,0 +1,29 @@ +version: 2 +networkType: 152 +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +nodes: + - + name: node + friendlyName: myRegularNode + roles: 'Peer,Api,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: TBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TBUWTY + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: TDYBCGC2IHGHEPURL6P62N46JTDMBHGXQNXQYJA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: TDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4CWJJNI + voting: + - + publicKey: 699B5C153608E1C1980EFA5B982411AD73AD66F72B46F979C84E4684A66E7AE3 + startEpoch: 311 + endEpoch: 1030 + filename: private_key_tree1.dat diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/docker-compose.yml new file mode 100644 index 000000000..766a642a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/docker-compose.yml @@ -0,0 +1,117 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - myRegularNode.host.com + hostname: myRegularNode.host.com + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 + wallet: + container_name: wallet + image: 'symbolplatform/symbol-desktop-wallet:1.0.1' + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '80:80' + restart: 'on-failure:2' + volumes: + - '../wallets/wallet:/usr/share/nginx/html/config:ro' + explorer: + container_name: explorer + image: 'symbolplatform/symbol-explorer:1.1.0-alpha' + entrypoint: ash -c "/bin/ash /symbol-commands/run.sh explorer" + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '90:4000' + restart: 'on-failure:2' + volumes: + - '../explorers/explorer:/symbol-workdir:ro' + - './explorer:/symbol-commands:ro' + faucet: + container_name: faucet + image: 'symbolplatform/symbol-faucet:1.0.1-alpha' + stop_signal: SIGINT + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + NATIVE_CURRENCY_NAME: symbol.xym + FAUCET_PRIVATE_KEY: '' + NATIVE_CURRENCY_ID: 091F837E059AE13C + restart: 'on-failure:2' + ports: + - '100:4000' + depends_on: + - rest-gateway +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/explorers/explorer/default.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/explorers/explorer/default.json new file mode 100644 index 000000000..580ace2e7 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/explorers/explorer/default.json @@ -0,0 +1,63 @@ +{ + "peersApi": { + "defaultNode": "http://myRegularNode.host.com:3000", + "nodes": [ + "http://myRegularNode.host.com:3000", + "http://ngl-dual-501.testnet.symboldev.network:3000", + "http://ngl-dual-601.testnet.symboldev.network:3000", + "http://ngl-dual-001.testnet.symboldev.network:3000", + "http://ngl-dual-101.testnet.symboldev.network:3000", + "http://ngl-dual-201.testnet.symboldev.network:3000", + "http://ngl-dual-301.testnet.symboldev.network:3000", + "http://ngl-dual-401.testnet.symboldev.network:3000", + "http://ngl-dual-502.testnet.symboldev.network:3000", + "http://ngl-dual-602.testnet.symboldev.network:3000", + "http://ngl-api-001.testnet.symboldev.network:3000", + "http://ngl-api-101.testnet.symboldev.network:3000" + ] + }, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "symbol.xym", + "mosaicId": "091F837E059AE13C", + "divisibility": "6", + "namespaceId": "E74B99BA41F4AFEE", + "networkIdentifier": 152 + }, + "footer": { + "link": [ + { + "href": "https://nemflash.io/", + "text": "NEM News", + "icon": "IconNewspaper" + }, + { + "href": "https://forum.nem.io/", + "text": "Forum", + "icon": "IconForum" + }, + { + "href": "https://t.me/nemred", + "text": "Telegram", + "icon": "IconTelegram" + }, + { + "href": "https://www.reddit.com/r/nem/", + "text": "Reddit", + "icon": "IconReddit" + }, + { + "href": "https://github.com/nemtech", + "text": "Github", + "icon": "IconGithub" + }, + { + "href": "http://localhost:100/", + "text": "Faucet", + "icon": "IconHomeCurrencyUsd" + } + ] + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..aab71f528 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhR+aQFMWbkYFMGwy+KLjUsou/1kgzAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM0MVoXDTQxMDcwMTE3MjM0MVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAwWnkN/Jht8GVEsOjnMYIbAmKJ80Q +oZdK0vYIbQGkOzUYdFr8l29jwg83o7y5DqXYB6wGsy74V36cnd7PWFWcDw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..2cddefbae --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMEPVz2aG7BMfH/824hCBMdZY0eMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzQxWhcNMjIwNzE2MTcyMzQxWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAXG8R7eHKEJ7LuF1JDiY22ixGiqn/pq4sMmuUsnjF +WdoLDNDdAwxVhcygdDDLul69N9noa2CwarNTK/8m1r76CQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..73affe258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "publicTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..57b338cb5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6848fd5d1 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..905416151 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..9daa77117 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..28ed919f7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..8eeb48e8e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..aab71f528 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhR+aQFMWbkYFMGwy+KLjUsou/1kgzAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM0MVoXDTQxMDcwMTE3MjM0MVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAwWnkN/Jht8GVEsOjnMYIbAmKJ80Q +oZdK0vYIbQGkOzUYdFr8l29jwg83o7y5DqXYB6wGsy74V36cnd7PWFWcDw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..2cddefbae --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMEPVz2aG7BMfH/824hCBMdZY0eMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzQxWhcNMjIwNzE2MTcyMzQxWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAXG8R7eHKEJ7LuF1JDiY22ixGiqn/pq4sMmuUsnjF +WdoLDNDdAwxVhcygdDDLul69N9noa2CwarNTK/8m1r76CQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..7112f1984 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMEPVz2aG7BMfH/824hCBMdZY0eMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzQxWhcNMjIwNzE2MTcyMzQxWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAXG8R7eHKEJ7LuF1JDiY22ixGiqn/pq4sMmuUsnjF +WdoLDNDdAwxVhcygdDDLul69N9noa2CwarNTK/8m1r76CQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhR+aQFMWbkYFMGwy+KLjUsou/1kgzAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM0MVoXDTQxMDcwMTE3MjM0MVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAwWnkN/Jht8GVEsOjnMYIbAmKJ80Q +oZdK0vYIbQGkOzUYdFr8l29jwg83o7y5DqXYB6wGsy74V36cnd7PWFWcDw== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..8eeb48e8e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..505cd00ab Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/nodes/node/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/preset.yml new file mode 100644 index 000000000..2a92d4271 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/preset.yml @@ -0,0 +1,965 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 1d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1616694977s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 720 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500000 +votingSetGrouping: 720 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +assemblies: 'api, dual, peer' +networkDescription: Symbol Testnet +baseNamespace: symbol +currencyMosaicId: 091F837E059AE13C +harvestingMosaicId: 091F837E059AE13C +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA +namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +networkType: 152 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ +rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 311 +faucetUrl: 'http://localhost:100' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-501.testnet.symboldev.network:3000' + - 'http://ngl-dual-601.testnet.symboldev.network:3000' + - 'http://ngl-dual-001.testnet.symboldev.network:3000' + - 'http://ngl-dual-101.testnet.symboldev.network:3000' + - 'http://ngl-dual-201.testnet.symboldev.network:3000' + - 'http://ngl-dual-301.testnet.symboldev.network:3000' + - 'http://ngl-dual-401.testnet.symboldev.network:3000' + - 'http://ngl-dual-502.testnet.symboldev.network:3000' + - 'http://ngl-dual-602.testnet.symboldev.network:3000' + - 'http://ngl-api-001.testnet.symboldev.network:3000' + - 'http://ngl-api-101.testnet.symboldev.network:3000' +knownPeers: + api-node: + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api + peer-node: + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + host: myRegularNode.host.com + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' + friendlyName: myRegularNode + voting: true +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +wallets: + - + name: wallet + title: Symbol Bootstrap Wallet + openPort: '80' +explorers: + - + name: explorer + openPort: '90' + footer: + link: + - + href: 'https://nemflash.io/' + text: NEM News + icon: IconNewspaper + - + href: 'https://forum.nem.io/' + text: Forum + icon: IconForum + - + href: 'https://t.me/nemred' + text: Telegram + icon: IconTelegram + - + href: 'https://www.reddit.com/r/nem/' + text: Reddit + icon: IconReddit + - + href: 'https://github.com/nemtech' + text: Github + icon: IconGithub + - + href: 'http://localhost:100/' + text: Faucet + icon: IconHomeCurrencyUsd +faucets: + - + name: faucet + gateway: rest-gateway + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + openPort: '100' +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: testnet +assembly: demo +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - + friendlyName: myRegularNode + host: myRegularNode.host.com + voting: true +networkIdentifier: public-test +networkName: publicTest diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/reports/node-config.csv new file mode 100644 index 000000000..9a8279c87 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). +friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/reports/node-config.rst new file mode 100644 index 000000000..c6ddf2608 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). + friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/app.conf.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/app.conf.js new file mode 100644 index 000000000..6277c735e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/app.conf.js @@ -0,0 +1,23 @@ +var appConfig = { + title: 'Symbol Bootstrap Wallet', + constants: { + EVENTS_THROTTLING_TIME: 6000, + MAX_LISTENER_RECONNECT_TRIES: 20, + MAX_PASSWORD_LENGTH: 64, + MAX_REMOTE_ACCOUNT_CHECKS: 10, + MAX_SEED_ACCOUNTS_NUMBER: 10, + MIN_PASSWORD_LENGTH: 8, + SEED_ACCOUNT_NAME_PREFIX: 'SeedWallet-', + ANNOUNCE_TRANSACTION_TIMEOUT: 240000, + DECIMAL_SEPARATOR: Number('1.1').toLocaleString().substring(1, 2), + }, + languages: [ + { value: 'en-US', label: 'English' }, + { value: 'zh-CN', label: '中文' }, + { value: 'ja-JP', label: '日本語' }, + ], + marketServerUrl: 'http://app.nemcn.io', + articlesFeedUrl: 'http://rssmix.com/u/11801188/rss.xml', +} +window.appConfig = appConfig +console.log('appConfig loaded!', appConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/fees.conf.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/fees.conf.js new file mode 100644 index 000000000..1a40c3f28 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/fees.conf.js @@ -0,0 +1,9 @@ +var feesConfig = { + median: 10, + free: 0, + slow: 5, + slowest: 1, + fast: 20, +} +window.feesConfig = feesConfig +console.log('feesConfig loaded!', feesConfig) diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/network.conf.js b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/network.conf.js new file mode 100644 index 000000000..ff5dabb85 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/network.conf.js @@ -0,0 +1,48 @@ +var networkTypeConfig = { + "explorerUrl": "", + "faucetUrl": "http://localhost:100", + "defaultNetworkType": 152, + "defaultNodeUrl": "http://myRegularNode.host.com:3000", + "networkConfigurationDefaults": { + "maxMosaicDivisibility": 6, + "namespaceGracePeriodDuration": 86400, + "lockedFundsPerAggregate": "10000000", + "maxCosignatoriesPerAccount": 25, + "blockGenerationTargetTime": 30, + "maxNamespaceDepth": 3, + "maxMosaicDuration": 315360000, + "minNamespaceDuration": 2592000, + "maxNamespaceDuration": 157680000, + "maxTransactionsPerAggregate": 100, + "maxCosignedAccountsPerAccount": 25, + "maxMessageSize": 1024, + "maxMosaicAtomicUnits": 8999999999000000, + "currencyMosaicId": "091F837E059AE13C", + "harvestingMosaicId": "091F837E059AE13C", + "defaultDynamicFeeMultiplier": 100, + "epochAdjustment": 1616694977, + "totalChainImportance": 7842928625000000, + "generationHash": "3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155" + }, + "nodes": [ + {"friendlyName": "myregularnode.host.com", "roles": 2, "url": "http://myRegularNode.host.com:3000"}, + {"friendlyName": "ngl-dual-501.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-501.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-601.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-601.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-001.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-001.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-101.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-101.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-201.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-201.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-301.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-301.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-401.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-401.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-502.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-502.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-dual-602.testnet.symboldev.network", "roles": 2, "url": "http://ngl-dual-602.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-api-001.testnet.symboldev.network", "roles": 2, "url": "http://ngl-api-001.testnet.symboldev.network:3000"}, + {"friendlyName": "ngl-api-101.testnet.symboldev.network", "roles": 2, "url": "http://ngl-api-101.testnet.symboldev.network:3000"}, + ] +} +var networkConfig = { 152 : networkTypeConfig } +window.networkConfig = networkConfig +console.log('networkConfig loaded!', networkConfig) + + + + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/profileImporter.html b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/profileImporter.html new file mode 100644 index 000000000..bd0ee1add --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-demo-voting-target/wallets/wallet/profileImporter.html @@ -0,0 +1,140 @@ + + + + + + Profile Importer + + + +

Profile Importer File Form

+ + +
+
+
+ + +
+ +

Profile Importer Text Form

+
+
+ +
+
+ Go back to the wallet + + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/addresses.yml new file mode 100644 index 000000000..0c96fbed6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/addresses.yml @@ -0,0 +1,24 @@ +version: 2 +networkType: 152 +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +nodes: + - + name: node + friendlyName: myRegularNode + roles: 'Peer,Api' + main: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA1 + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: TBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TBUWTY + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: TDYBCGC2IHGHEPURL6P62N46JTDMBHGXQNXQYJA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: TDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4CWJJNI diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/docker-compose.yml new file mode 100644 index 000000000..47307d71d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/docker-compose.yml @@ -0,0 +1,73 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - myRegularNode.host.com + hostname: myRegularNode.host.com + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..bfedfbb8d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRFCHFas9XZJjx7JCkfLJb0o05mKTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcxNjE2NDcwMFoXDTQxMDcxMTE2NDcwMFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EARidFOiAVfn+isYVVgp3BGDFVHCO+ +i5hE1LN98Ed1UUuA5EsZN2Xe9wfEMnD18hzNHfJSGyoIPhc2pPTLq0eXDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..95e789ca6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNMM6NllinYokAjvm94gN4HzIphMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzE2MTY0NzAwWhcNMjIwNzI2MTY0NzAwWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAXSG3+uBjem92piDOFNCmCJP5U5nMbQnnzYpEEvZa +JVKoAsmqh6f9HNdDpuDG+XrtxJOAvVdhwxfffWsB3HzuCA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..f1711b336 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..73affe258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "publicTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..57b338cb5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6848fd5d1 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..905416151 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..9daa77117 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..28ed919f7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..1feee6a11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..f1711b336 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..bfedfbb8d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRFCHFas9XZJjx7JCkfLJb0o05mKTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcxNjE2NDcwMFoXDTQxMDcxMTE2NDcwMFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EARidFOiAVfn+isYVVgp3BGDFVHCO+ +i5hE1LN98Ed1UUuA5EsZN2Xe9wfEMnD18hzNHfJSGyoIPhc2pPTLq0eXDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..95e789ca6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNMM6NllinYokAjvm94gN4HzIphMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzE2MTY0NzAwWhcNMjIwNzI2MTY0NzAwWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAXSG3+uBjem92piDOFNCmCJP5U5nMbQnnzYpEEvZa +JVKoAsmqh6f9HNdDpuDG+XrtxJOAvVdhwxfffWsB3HzuCA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..3ba260408 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNMM6NllinYokAjvm94gN4HzIphMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzE2MTY0NzAwWhcNMjIwNzI2MTY0NzAwWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAXSG3+uBjem92piDOFNCmCJP5U5nMbQnnzYpEEvZa +JVKoAsmqh6f9HNdDpuDG+XrtxJOAvVdhwxfffWsB3HzuCA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRFCHFas9XZJjx7JCkfLJb0o05mKTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcxNjE2NDcwMFoXDTQxMDcxMTE2NDcwMFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EARidFOiAVfn+isYVVgp3BGDFVHCO+ +i5hE1LN98Ed1UUuA5EsZN2Xe9wfEMnD18hzNHfJSGyoIPhc2pPTLq0eXDQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..1feee6a11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..f1711b336 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/preset.yml new file mode 100644 index 000000000..dc31deef5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/preset.yml @@ -0,0 +1,916 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 1d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1616694977s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 720 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500000 +votingSetGrouping: 720 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +assemblies: 'api, dual, peer' +networkDescription: Symbol Testnet +baseNamespace: symbol +currencyMosaicId: 091F837E059AE13C +harvestingMosaicId: 091F837E059AE13C +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA +namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +networkType: 152 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ +rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 311 +faucetUrl: 'http://faucet.testnet.symboldev.network' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-501.testnet.symboldev.network:3000' + - 'http://ngl-dual-601.testnet.symboldev.network:3000' + - 'http://ngl-dual-001.testnet.symboldev.network:3000' + - 'http://ngl-dual-101.testnet.symboldev.network:3000' + - 'http://ngl-dual-201.testnet.symboldev.network:3000' + - 'http://ngl-dual-301.testnet.symboldev.network:3000' + - 'http://ngl-dual-401.testnet.symboldev.network:3000' + - 'http://ngl-dual-502.testnet.symboldev.network:3000' + - 'http://ngl-dual-602.testnet.symboldev.network:3000' + - 'http://ngl-api-001.testnet.symboldev.network:3000' + - 'http://ngl-api-101.testnet.symboldev.network:3000' +knownPeers: + api-node: + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api + peer-node: + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' + friendlyName: myRegularNode + host: myRegularNode.host.com +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: ENCRYPT +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: testnet +assembly: dual +customPresetCache: + privateKeySecurityMode: ENCRYPT + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - + friendlyName: myRegularNode + host: myRegularNode.host.com +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public-test +networkName: publicTest diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/reports/node-config.csv new file mode 100644 index 000000000..97229fe98 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). +friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/reports/node-config.rst new file mode 100644 index 000000000..b5377e68c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-encrypt-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). + friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/addresses.yml new file mode 100644 index 000000000..8ea648c9e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/addresses.yml @@ -0,0 +1,33 @@ +version: 2 +networkType: 152 +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +nodes: + - + name: node + friendlyName: mySupernode + roles: 'Peer,Api,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: TBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TBUWTY + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: TDYBCGC2IHGHEPURL6P62N46JTDMBHGXQNXQYJA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: TDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4CWJJNI + agent: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA5 + publicKey: 320F30C51494F9F2F0A3407CC2673D1AE60DDB7AEC1AE8388336A4C04EA17CBE + address: TBJ3YVBWB5PBTRBXLYDKZGITMNEYBLZSWKBLMMQ + voting: + - + publicKey: 699B5C153608E1C1980EFA5B982411AD73AD66F72B46F979C84E4684A66E7AE3 + startEpoch: 311 + endEpoch: 1030 + filename: private_key_tree1.dat diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/docker-compose.yml new file mode 100644 index 000000000..79ec71be9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/docker-compose.yml @@ -0,0 +1,85 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - mySupernode.host.com + hostname: mySupernode.host.com + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + node-agent: + user: '1000:1000' + container_name: node-agent + image: 'symbolplatform/symbol-node-rewards-agent:2.0.0' + working_dir: /symbol-workdir + entrypoint: /app/agent-linux.bin --config agent.properties + ports: + - '7881:7881' + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node/agent:/symbol-workdir:rw' + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..d795548f2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ5KcWs5VkbHL2GLfuGdZ2RvrfDXTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM0OVoXDTQxMDcwMTE3MjM0OVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA0/HZpgoq+7t44Ff0mBmZE+8QjAFB +Y1WFUeMA4dzjeZyGeRw4PfuIA+byIM0U4ZlRCFFhZDXFVBLTcOGjSZHFCQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..dc81a6300 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNLdDoQCzd6jOmynPWm2o51HumsMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzQ5WhcNMjIwNzE2MTcyMzQ5WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAfpUsGTXgVFbi9sqobPrah0duVy1jZmo9fHY07QZU +8DQQIf+5JrhCFCfKQzTQdBT0LiVJGFy1QO9Gkdnc2cJoCA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..f89340277 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = mySupernode.host.com +friendlyName = mySupernode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..73affe258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "publicTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..57b338cb5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6848fd5d1 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..905416151 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..9daa77117 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..28ed919f7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.cnf new file mode 100644 index 000000000..453557283 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.cnf @@ -0,0 +1,20 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat +private_key = agent-ca.key.pem +certificate = agent-ca.crt.pem +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = Agent CA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.csr.pem new file mode 100644 index 000000000..53d95ca95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGSMEYCAQAwEzERMA8GA1UEAwwIQWdlbnQgQ0EwKjAFBgMrZXADIQAyDzDFFJT5 +8vCjQHzCZz0a5g3beuwa6DiDNqTATqF8vqAAMAUGAytlcANBACZUAUp75EDHvFRB +nAHp4Z2TwZiG96viE+9RMt/lU4zG/4jREDRj03iz/cb2rWi9QMU7MsfI9prVNJOC +paE7awg= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.key.pem new file mode 100644 index 000000000..6eac3f041 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqql +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.pubkey.pem new file mode 100644 index 000000000..414351d3a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAMg8wxRSU+fLwo0B8wmc9GuYN23rsGug4gzakwE6hfL4= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-comm.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-comm.cnf new file mode 100644 index 000000000..766f8efbc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent-comm.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = Agent communication cert + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent.properties new file mode 100644 index 000000000..dc66cf330 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/agent.properties @@ -0,0 +1,8 @@ +CERTS_CONTROLLER_CA_CERT_FILE=LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +CONTROLLER_API_URL=http://node-monitoring.testnet.symboldev.network:7890 +REST_GATEWAY_URL=http://mySupernode.host.com:3000 +REWARD_PROGRAM=SuperNode +MAIN_PUBLIC_KEY=7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 +LOGGER_FILE=logs/agent.log +CERTS_AGENT_CA_KEY_FILE=agent-ca.key.pem +CERTS_AGENT_CA_CERT_FILE=agent-ca.csr.pem diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/metadata.yml new file mode 100644 index 000000000..a43e4a184 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/agent/metadata.yml @@ -0,0 +1,2 @@ +version: 1 +agentPublicKey: 320F30C51494F9F2F0A3407CC2673D1AE60DDB7AEC1AE8388336A4C04EA17CBE diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..8eeb48e8e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..f89340277 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = mySupernode.host.com +friendlyName = mySupernode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..d795548f2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ5KcWs5VkbHL2GLfuGdZ2RvrfDXTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM0OVoXDTQxMDcwMTE3MjM0OVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA0/HZpgoq+7t44Ff0mBmZE+8QjAFB +Y1WFUeMA4dzjeZyGeRw4PfuIA+byIM0U4ZlRCFFhZDXFVBLTcOGjSZHFCQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..dc81a6300 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNLdDoQCzd6jOmynPWm2o51HumsMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzQ5WhcNMjIwNzE2MTcyMzQ5WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAfpUsGTXgVFbi9sqobPrah0duVy1jZmo9fHY07QZU +8DQQIf+5JrhCFCfKQzTQdBT0LiVJGFy1QO9Gkdnc2cJoCA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..12ec7c49a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhNLdDoQCzd6jOmynPWm2o51HumsMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzQ5WhcNMjIwNzE2MTcyMzQ5WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAfpUsGTXgVFbi9sqobPrah0duVy1jZmo9fHY07QZU +8DQQIf+5JrhCFCfKQzTQdBT0LiVJGFy1QO9Gkdnc2cJoCA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ5KcWs5VkbHL2GLfuGdZ2RvrfDXTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjM0OVoXDTQxMDcwMTE3MjM0OVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA0/HZpgoq+7t44Ff0mBmZE+8QjAFB +Y1WFUeMA4dzjeZyGeRw4PfuIA+byIM0U4ZlRCFFhZDXFVBLTcOGjSZHFCQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..8eeb48e8e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..f89340277 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = mySupernode.host.com +friendlyName = mySupernode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..505cd00ab Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/nodes/node/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/preset.yml new file mode 100644 index 000000000..8f559ce82 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/preset.yml @@ -0,0 +1,920 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 1d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1616694977s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 720 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500000 +votingSetGrouping: 720 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +assemblies: 'api, dual, peer' +networkDescription: Symbol Testnet +baseNamespace: symbol +currencyMosaicId: 091F837E059AE13C +harvestingMosaicId: 091F837E059AE13C +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA +namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +networkType: 152 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ +rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 311 +faucetUrl: 'http://faucet.testnet.symboldev.network' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-501.testnet.symboldev.network:3000' + - 'http://ngl-dual-601.testnet.symboldev.network:3000' + - 'http://ngl-dual-001.testnet.symboldev.network:3000' + - 'http://ngl-dual-101.testnet.symboldev.network:3000' + - 'http://ngl-dual-201.testnet.symboldev.network:3000' + - 'http://ngl-dual-301.testnet.symboldev.network:3000' + - 'http://ngl-dual-401.testnet.symboldev.network:3000' + - 'http://ngl-dual-502.testnet.symboldev.network:3000' + - 'http://ngl-dual-602.testnet.symboldev.network:3000' + - 'http://ngl-api-001.testnet.symboldev.network:3000' + - 'http://ngl-api-101.testnet.symboldev.network:3000' +knownPeers: + api-node: + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api + peer-node: + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' + friendlyName: mySupernode + host: mySupernode.host.com + voting: true + rewardProgram: SuperNode +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: testnet +assembly: dual +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - + friendlyName: mySupernode + host: mySupernode.host.com + voting: true + rewardProgram: SuperNode +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public-test +networkName: publicTest diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/reports/node-config.csv new file mode 100644 index 000000000..ef0c8473c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; mySupernode.host.com; string; Node host (leave empty to auto-detect IP). +friendlyName; mySupernode; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/reports/node-config.rst new file mode 100644 index 000000000..4a1be531b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-supernode-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; mySupernode.host.com; string; Node host (leave empty to auto-detect IP). + friendlyName; mySupernode; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/addresses.yml new file mode 100644 index 000000000..4f5d9305e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/addresses.yml @@ -0,0 +1,23 @@ +version: 2 +networkType: 152 +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: 'Peer,Api' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: TBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TBUWTY + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: TDYBCGC2IHGHEPURL6P62N46JTDMBHGXQNXQYJA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: TDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4CWJJNI diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/docker-compose.yml new file mode 100644 index 000000000..486c0e258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/docker-compose.yml @@ -0,0 +1,68 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..baa7a36bc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRq2BhTgSaK3Cjkmx0tffDTr+fKpDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxM1oXDTQxMDcwMTE3MjMxM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAiurbuhTmpc2MUjPKNqDtFb5LJGmx +gyZUOmwJtXiruOW9H5xtqjnskMOfg6XzYrR0t5TXgDKvE5ExKDv95itBAg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..5f8d39c8c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhM8LpCndY2U+TXSCMYSy8GzkcsVMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzEzWhcNMjIwNzE2MTcyMzEzWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAKTBg9nEmB+qsS/eJN2OTN9YGpb2lHTc0hM334VCn +rZhM03GQN1tj5QZ4YjlhlT3kL/Qfo1WCaBWSjCIDT3ZrDA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..62198921a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..73affe258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "publicTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..57b338cb5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6848fd5d1 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..905416151 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..9daa77117 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..28ed919f7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..1feee6a11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..62198921a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..baa7a36bc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRq2BhTgSaK3Cjkmx0tffDTr+fKpDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxM1oXDTQxMDcwMTE3MjMxM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAiurbuhTmpc2MUjPKNqDtFb5LJGmx +gyZUOmwJtXiruOW9H5xtqjnskMOfg6XzYrR0t5TXgDKvE5ExKDv95itBAg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..5f8d39c8c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhM8LpCndY2U+TXSCMYSy8GzkcsVMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzEzWhcNMjIwNzE2MTcyMzEzWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAKTBg9nEmB+qsS/eJN2OTN9YGpb2lHTc0hM334VCn +rZhM03GQN1tj5QZ4YjlhlT3kL/Qfo1WCaBWSjCIDT3ZrDA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..53ee570b1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhM8LpCndY2U+TXSCMYSy8GzkcsVMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzEzWhcNMjIwNzE2MTcyMzEzWjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAKTBg9nEmB+qsS/eJN2OTN9YGpb2lHTc0hM334VCn +rZhM03GQN1tj5QZ4YjlhlT3kL/Qfo1WCaBWSjCIDT3ZrDA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRq2BhTgSaK3Cjkmx0tffDTr+fKpDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxM1oXDTQxMDcwMTE3MjMxM1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAiurbuhTmpc2MUjPKNqDtFb5LJGmx +gyZUOmwJtXiruOW9H5xtqjnskMOfg6XzYrR0t5TXgDKvE5ExKDv95itBAg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..1feee6a11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..62198921a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/preset.yml new file mode 100644 index 000000000..8dde5ab31 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/preset.yml @@ -0,0 +1,912 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 1d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1616694977s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 720 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500000 +votingSetGrouping: 720 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +assemblies: 'api, dual, peer' +networkDescription: Symbol Testnet +baseNamespace: symbol +currencyMosaicId: 091F837E059AE13C +harvestingMosaicId: 091F837E059AE13C +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA +namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +networkType: 152 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ +rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 311 +faucetUrl: 'http://faucet.testnet.symboldev.network' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-501.testnet.symboldev.network:3000' + - 'http://ngl-dual-601.testnet.symboldev.network:3000' + - 'http://ngl-dual-001.testnet.symboldev.network:3000' + - 'http://ngl-dual-101.testnet.symboldev.network:3000' + - 'http://ngl-dual-201.testnet.symboldev.network:3000' + - 'http://ngl-dual-301.testnet.symboldev.network:3000' + - 'http://ngl-dual-401.testnet.symboldev.network:3000' + - 'http://ngl-dual-502.testnet.symboldev.network:3000' + - 'http://ngl-dual-602.testnet.symboldev.network:3000' + - 'http://ngl-api-001.testnet.symboldev.network:3000' + - 'http://ngl-api-101.testnet.symboldev.network:3000' +knownPeers: + api-node: + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api + peer-node: + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: testnet +assembly: dual +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public-test +networkName: publicTest diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/reports/node-config.csv new file mode 100644 index 000000000..ea43559af --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/reports/node-config.rst new file mode 100644 index 000000000..c9525f367 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/addresses.yml new file mode 100644 index 000000000..9ad0b60ce --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/addresses.yml @@ -0,0 +1,29 @@ +version: 2 +networkType: 152 +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +nodes: + - + name: node + friendlyName: myRegularNode + roles: 'Peer,Api,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: TBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TBUWTY + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: TDYBCGC2IHGHEPURL6P62N46JTDMBHGXQNXQYJA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: TDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4CWJJNI + voting: + - + publicKey: 699B5C153608E1C1980EFA5B982411AD73AD66F72B46F979C84E4684A66E7AE3 + startEpoch: 311 + endEpoch: 1030 + filename: private_key_tree1.dat diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/docker-compose.yml new file mode 100644 index 000000000..47307d71d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/docker-compose.yml @@ -0,0 +1,73 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - myRegularNode.host.com + hostname: myRegularNode.host.com + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..45ce3b306 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ1M7aMumXu+5sFDxlH4CNTCFm6bTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzOVoXDTQxMDcwMTE3MjMzOVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAaFuIQnS96fvNB18bbD3ctkECjjzB +WDRuBaB+3iP/9XxPNnMMe6UVYUWxQD3BKtNjYoXum3SvsDSF4f86fbbPDg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..41f32a60e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhN7zE9nfPzROyM3tmSfZoJaUO93MAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzM5WhcNMjIwNzE2MTcyMzM5WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAG7EyEc8bkz/f8IHtXsnFfsK2ygEMRZhaflkNIc+N +CPYylNWazl6wkSuAqtfhIwy6ldTqVtio143caZ8PGgUVCg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/rest.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..73affe258 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "publicTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..57b338cb5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6848fd5d1 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..905416151 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..9daa77117 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..28ed919f7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..8eeb48e8e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..45ce3b306 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ1M7aMumXu+5sFDxlH4CNTCFm6bTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzOVoXDTQxMDcwMTE3MjMzOVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAaFuIQnS96fvNB18bbD3ctkECjjzB +WDRuBaB+3iP/9XxPNnMMe6UVYUWxQD3BKtNjYoXum3SvsDSF4f86fbbPDg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..41f32a60e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhN7zE9nfPzROyM3tmSfZoJaUO93MAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzM5WhcNMjIwNzE2MTcyMzM5WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAG7EyEc8bkz/f8IHtXsnFfsK2ygEMRZhaflkNIc+N +CPYylNWazl6wkSuAqtfhIwy6ldTqVtio143caZ8PGgUVCg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..ade5622d8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhN7zE9nfPzROyM3tmSfZoJaUO93MAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzM5WhcNMjIwNzE2MTcyMzM5WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAG7EyEc8bkz/f8IHtXsnFfsK2ygEMRZhaflkNIc+N +CPYylNWazl6wkSuAqtfhIwy6ldTqVtio143caZ8PGgUVCg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ1M7aMumXu+5sFDxlH4CNTCFm6bTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzOVoXDTQxMDcwMTE3MjMzOVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EAaFuIQnS96fvNB18bbD3ctkECjjzB +WDRuBaB+3iP/9XxPNnMMe6UVYUWxQD3BKtNjYoXum3SvsDSF4f86fbbPDg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..8eeb48e8e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..51aa897c0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..505cd00ab Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/nodes/node/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/preset.yml new file mode 100644 index 000000000..aaf97a9ec --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/preset.yml @@ -0,0 +1,918 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 1d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1616694977s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 720 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500000 +votingSetGrouping: 720 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +assemblies: 'api, dual, peer' +networkDescription: Symbol Testnet +baseNamespace: symbol +currencyMosaicId: 091F837E059AE13C +harvestingMosaicId: 091F837E059AE13C +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA +namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +networkType: 152 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ +rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 311 +faucetUrl: 'http://faucet.testnet.symboldev.network' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-501.testnet.symboldev.network:3000' + - 'http://ngl-dual-601.testnet.symboldev.network:3000' + - 'http://ngl-dual-001.testnet.symboldev.network:3000' + - 'http://ngl-dual-101.testnet.symboldev.network:3000' + - 'http://ngl-dual-201.testnet.symboldev.network:3000' + - 'http://ngl-dual-301.testnet.symboldev.network:3000' + - 'http://ngl-dual-401.testnet.symboldev.network:3000' + - 'http://ngl-dual-502.testnet.symboldev.network:3000' + - 'http://ngl-dual-602.testnet.symboldev.network:3000' + - 'http://ngl-api-001.testnet.symboldev.network:3000' + - 'http://ngl-api-101.testnet.symboldev.network:3000' +knownPeers: + api-node: + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api + peer-node: + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' + friendlyName: myRegularNode + host: myRegularNode.host.com + voting: true +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: testnet +assembly: dual +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - + friendlyName: myRegularNode + host: myRegularNode.host.com + voting: true +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public-test +networkName: publicTest diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/reports/node-config.csv new file mode 100644 index 000000000..9a8279c87 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). +friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/reports/node-config.rst new file mode 100644 index 000000000..c6ddf2608 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-dual-voting-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). + friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/addresses.yml new file mode 100644 index 000000000..74f8c9983 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/addresses.yml @@ -0,0 +1,65 @@ +version: 2 +networkType: 152 +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +nodes: + - + name: peer-node-0 + friendlyName: peer-node-0 + roles: 'Peer,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: TBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TBUWTY + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: TDYBCGC2IHGHEPURL6P62N46JTDMBHGXQNXQYJA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: TDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4CWJJNI + voting: + - + publicKey: 675D847C23F181E8EA64A1DA926B99406C12155F630240622D26EBB9290A0B02 + startEpoch: 311 + endEpoch: 1030 + filename: private_key_tree1.dat + - + name: peer-node-1 + friendlyName: peer-node-1 + roles: 'Peer,Voting' + main: + publicKey: F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8 + address: TCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KDGJ2LY + transport: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 404F4D08238867A2CBE61CB4D3AB5E6E8F69B6DBE80442025021F518B099BF8A + address: TAPMWPTZRETEQRNQ37UE72IAI4RHWXDH3D5UYEA + remote: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 3A6DF713A680D77EAF40BDD5DB1A701E52303BDC29314B9A0C00F17CF31B9AE4 + address: TCA7OHAAJTLWCIDAGOG4X5BTKBJRWMFLHEDT7YY + vrf: + privateKey: 1000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: CF58C1A57E19B238B0D8DC1E74363C5BF399CF87251F4FF6A778B33946ADA34D + address: TC7B6MRPIOWQASLSHCXBKQ4ND4FH4TRGG35GJLQ + voting: + - + publicKey: 8AC4BCEE773D4D0511AC0D26BBB99A6D22A69E8BC20398AA03EA16640B5042EA + startEpoch: 311 + endEpoch: 1030 + filename: private_key_tree1.dat + - + name: api-node-0 + friendlyName: api-node-0 + roles: Api + main: + publicKey: 65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2 + address: TDW2FZUUNUJC2VQ6OHNMTHJ2NNLB2YXA22TCV2I + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000BBBBB2 + publicKey: 051660FA2830C44E9DD2FD02A9E64A2878E013DEE5252B401D8B282D1C3A315D + address: TCNDEIWMTLC6R3KWMQOGHL7JMWGV5SYUTHTQFWI diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/docker-compose.yml new file mode 100644 index 000000000..9e7ee6b60 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/docker-compose.yml @@ -0,0 +1,113 @@ +version: '2.4' +services: + db-0: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db-0 + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db-0 --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + ports: + - '27017:27017' + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db-0:/dbdata:rw' + peer-node-0: + user: '1000:1000' + container_name: peer-node-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-0 NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/peer-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - peer-node-0 + hostname: peer-node-0 + peer-node-1: + user: '1000:1000' + container_name: peer-node-1 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-1 NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7901:7900' + volumes: + - '../nodes/peer-node-1:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - peer-node-1 + hostname: peer-node-1 + api-node-0: + user: '1000:1000' + container_name: api-node-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-0 NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + volumes: + - '../nodes/api-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db-0 + - api-node-broker-0 + networks: + default: + aliases: + - api-node-0 + hostname: api-node-0 + api-node-broker-0: + user: '1000:1000' + container_name: api-node-broker-0 + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-0 NORMAL + ports: + - '8002:7902' + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/api-node-0:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db-0 + rest-gateway-0: + container_name: rest-gateway-0 + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway-0:/symbol-workdir:rw' + depends_on: + - db-0 + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..8a7ee4a86 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH0MIGnAhQvEWfIztgfWng9MAmRRnGmcE2LmDAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMxNVoXDTQxMDcwMTE3MjMx +NVowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA7pzu4nuAkJT/ +gWbAVSZBKs++/vrXRc4c2Sl3aSYSz9k/qfxCWdoGX37jJl6Krn8dvumbzvqRXV15 +h3d28gLzBQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..444cf83ee --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHsMIGfAhQAq9U3RDpokq3Zymb/D8C97ILVYzAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMxNVoXDTIyMDcxNjE3MjMx +NVowFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPooMMROndL9 +AqnmSih44BPe5SUrQB2LKC0cOjFdMAUGAytlcANBAJC2h1lTAacnU6NbkuLJ2IYa +zi784kwMOLoiflGVVmpex6mTz4c+BsfcJYppbYaMjZs57XDmUlqGqyNIZdQSHwY= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..f99b069e0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7uy +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties new file mode 100644 index 000000000..3eceaf784 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/rest.json b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/rest.json new file mode 100644 index 000000000..7fe941086 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/gateways/rest-gateway-0/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "publicTest", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db-0:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "api-node-0", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "api-node-broker-0", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..57b338cb5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6848fd5d1 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..905416151 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..9daa77117 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..28ed919f7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties new file mode 100644 index 000000000..7f0e9b10f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db-0:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..1feee6a11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties new file mode 100644 index 000000000..3eceaf784 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..445df150b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/broker-config/resources/peers-p2p.json @@ -0,0 +1,181 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/ca.cert.pem new file mode 100644 index 000000000..8a7ee4a86 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH0MIGnAhQvEWfIztgfWng9MAmRRnGmcE2LmDAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMxNVoXDTQxMDcwMTE3MjMx +NVowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA7pzu4nuAkJT/ +gWbAVSZBKs++/vrXRc4c2Sl3aSYSz9k/qfxCWdoGX37jJl6Krn8dvumbzvqRXV15 +h3d28gLzBQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/ca.cnf new file mode 100644 index 000000000..1c97ff643 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = api-node-0-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem new file mode 100644 index 000000000..0cd8270a3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAZceH1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9I= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/metadata.yml new file mode 100644 index 000000000..81846081b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 051660FA2830C44E9DD2FD02A9E64A2878E013DEE5252B401D8B282D1C3A315D +mainPublicKey: 65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.cnf new file mode 100644 index 000000000..04488fc2e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = api-node-0 + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.crt.pem new file mode 100644 index 000000000..444cf83ee --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHsMIGfAhQAq9U3RDpokq3Zymb/D8C97ILVYzAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMxNVoXDTIyMDcxNjE3MjMx +NVowFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPooMMROndL9 +AqnmSih44BPe5SUrQB2LKC0cOjFdMAUGAytlcANBAJC2h1lTAacnU6NbkuLJ2IYa +zi784kwMOLoiflGVVmpex6mTz4c+BsfcJYppbYaMjZs57XDmUlqGqyNIZdQSHwY= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.csr.pem new file mode 100644 index 000000000..695c438fa --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGUMEgCAQAwFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPoo +MMROndL9AqnmSih44BPe5SUrQB2LKC0cOjFdoAAwBQYDK2VwA0EAnBJxE2GzcR1F +ZiV+P4NchhSxCZwKYs1BKGayBvP+M73+SD7HMjVvLl7PJ0dueARJlaJ4EmbDrYha +yxHPltGUCQ== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.full.crt.pem new file mode 100644 index 000000000..93532f00a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.full.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIHsMIGfAhQAq9U3RDpokq3Zymb/D8C97ILVYzAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMxNVoXDTIyMDcxNjE3MjMx +NVowFTETMBEGA1UEAwwKYXBpLW5vZGUtMDAqMAUGAytlcAMhAAUWYPooMMROndL9 +AqnmSih44BPe5SUrQB2LKC0cOjFdMAUGAytlcANBAJC2h1lTAacnU6NbkuLJ2IYa +zi784kwMOLoiflGVVmpex6mTz4c+BsfcJYppbYaMjZs57XDmUlqGqyNIZdQSHwY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH0MIGnAhQvEWfIztgfWng9MAmRRnGmcE2LmDAFBgMrZXAwHTEbMBkGA1UEAwwS +YXBpLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMxNVoXDTQxMDcwMTE3MjMx +NVowHTEbMBkGA1UEAwwSYXBpLW5vZGUtMC1hY2NvdW50MCowBQYDK2VwAyEAZceH +1DWWF+8iuHGQrvxUnvACdxBY6tdPaE++RCTzb9IwBQYDK2VwA0EA7pzu4nuAkJT/ +gWbAVSZBKs++/vrXRc4c2Sl3aSYSz9k/qfxCWdoGX37jJl6Krn8dvumbzvqRXV15 +h3d28gLzBQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.key.pem new file mode 100644 index 000000000..f99b069e0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7uy +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties new file mode 100644 index 000000000..7f0e9b10f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db-0:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..a90100db6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = false +extension.syncsource = false + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..1feee6a11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties new file mode 100644 index 000000000..3eceaf784 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = api-node-0 +friendlyName = api-node-0 +version = 1.0.1.0 +roles = Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..445df150b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/api-node-0/server-config/resources/peers-p2p.json @@ -0,0 +1,181 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/ca.cert.pem new file mode 100644 index 000000000..e4c07caa4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQpRyyc5JDKoJIg70Spd+DH1gzPCDAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIzMTVaFw00MTA3MDExNzIz +MTVaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0wLWFjY291bnQwKjAFBgMrZXADIQB+ +0cFNzVZE323rJZByp38wjbJLAR2aytrq1yZe/S0/RzAFBgMrZXADQQA3ErGfI/cn +2aTCKjyRiLMJDInvgTkkTWHnYqX5f9cD32Glr5lFv/0lPuUIr+/RzJZHiuG5i2f7 +lkuFxo+kcswN +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/ca.cnf new file mode 100644 index 000000000..82efc4d8c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-0-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.cnf new file mode 100644 index 000000000..831a2d17f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-0 + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.crt.pem new file mode 100644 index 000000000..6ab14a969 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhNS7zfdz6RA/HYUW/2p1Ffn5btsMAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMxNVoXDTIyMDcxNjE3MjMx +NVowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn8k5EsqTO +oz8FWYWMLr8mAvilUMW92wtxAAxJmDAFBgMrZXADQQCYdBIA/ET5cwVBjUG6pC5q +IJTsvmzp32x94XiW6zLEIKu/rCtLnmdFSMrm3gzxFwRGm4xp49itaoBX2whBcioL +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.csr.pem new file mode 100644 index 000000000..e5d6fef03 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGVMEkCAQAwFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn +8k5EsqTOoz8FWYWMLr8mAvilUMW92wtxAAxJmKAAMAUGAytlcANBAM/u7hnlO8Fc +fvqI6Cp8WcabjiTW6njd4v+ikUsrOgXnoSIAsl0FUp98QiNHkC9lHZFClW2vm0LX +2xKxaRlK5w4= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem new file mode 100644 index 000000000..97fd85df6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.full.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIHtMIGgAhNS7zfdz6RA/HYUW/2p1Ffn5btsMAUGAytlcDAeMRwwGgYDVQQDDBNw +ZWVyLW5vZGUtMC1hY2NvdW50MB4XDTIxMDcwNjE3MjMxNVoXDTIyMDcxNjE3MjMx +NVowFjEUMBIGA1UEAwwLcGVlci1ub2RlLTAwKjAFBgMrZXADIQBXJokn8k5EsqTO +oz8FWYWMLr8mAvilUMW92wtxAAxJmDAFBgMrZXADQQCYdBIA/ET5cwVBjUG6pC5q +IJTsvmzp32x94XiW6zLEIKu/rCtLnmdFSMrm3gzxFwRGm4xp49itaoBX2whBcioL +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH2MIGpAhQpRyyc5JDKoJIg70Spd+DH1gzPCDAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTAtYWNjb3VudDAeFw0yMTA3MDYxNzIzMTVaFw00MTA3MDExNzIz +MTVaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0wLWFjY291bnQwKjAFBgMrZXADIQB+ +0cFNzVZE323rJZByp38wjbJLAR2aytrq1yZe/S0/RzAFBgMrZXADQQA3ErGfI/cn +2aTCKjyRiLMJDInvgTkkTWHnYqX5f9cD32Glr5lFv/0lPuUIr+/RzJZHiuG5i2f7 +lkuFxo+kcswN +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..8eeb48e8e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties new file mode 100644 index 000000000..60a52ef9c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = peer-node-0 +friendlyName = peer-node-0 +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json new file mode 100644 index 000000000..9a50e4703 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-api.json @@ -0,0 +1,137 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2", + "endpoint": { + "host": "api-node-0", + "port": 7900 + }, + "metadata": { + "name": "api-node-0", + "roles": "Api" + } + }, + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..f0d0ef0b5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/server-config/resources/peers-p2p.json @@ -0,0 +1,170 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8", + "endpoint": { + "host": "peer-node-1", + "port": 7900 + }, + "metadata": { + "name": "peer-node-1", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..62c4ef841 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-0/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/ca.cert.pem new file mode 100644 index 000000000..055ebede6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/ca.cert.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIH2MIGpAhR0B3TugfUYfp1leORxk57cBcgqSzAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIzMTVaFw00MTA3MDExNzIz +MTVaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0xLWFjY291bnQwKjAFBgMrZXADIQD4 +4NlAAllAcZQdq4GsRVQ5CT1K4LDcxF7jazCmHx0suDAFBgMrZXADQQCanluJA5xF +m0qJDFShnWKo5djj1B+PMKqzqDAxVRpQsdiMfuS0LMmTozf2vdcaWg2GPTGViwnv +E2q8u9kA/6YI +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/ca.cnf new file mode 100644 index 000000000..d771d6d2f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-1-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem new file mode 100644 index 000000000..ed75563ae --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEA+ODZQAJZQHGUHauBrEVUOQk9SuCw3MRe42swph8dLLg= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/metadata.yml new file mode 100644 index 000000000..83cf1581d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 404F4D08238867A2CBE61CB4D3AB5E6E8F69B6DBE80442025021F518B099BF8A +mainPublicKey: F8E0D94002594071941DAB81AC455439093D4AE0B0DCC45EE36B30A61F1D2CB8 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.cnf new file mode 100644 index 000000000..cfd4a8a75 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = peer-node-1 + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.crt.pem new file mode 100644 index 000000000..d22f924f4 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.crt.pem @@ -0,0 +1,8 @@ +-----BEGIN CERTIFICATE----- +MIHuMIGhAhQAlAP9ARWhjyZiKpvsrEBxA/QxDDAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIzMTVaFw0yMjA3MTYxNzIz +MTVaMBYxFDASBgNVBAMMC3BlZXItbm9kZS0xMCowBQYDK2VwAyEAQE9NCCOIZ6LL +5hy006tebo9pttvoBEICUCH1GLCZv4owBQYDK2VwA0EA/8nuQ/4ECmBv/l0qPiYu +yJqHE9oj6AUcEQMg7ywkmjhnzOcbDptCws06ihQp4ayRegrOV38qzwjfFd26y4uN +BQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.csr.pem new file mode 100644 index 000000000..242155349 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGVMEkCAQAwFjEUMBIGA1UEAwwLcGVlci1ub2RlLTEwKjAFBgMrZXADIQBAT00I +I4hnosvmHLTTq15uj2m22+gEQgJQIfUYsJm/iqAAMAUGAytlcANBAGnB/L4O415m +MlD4wzlzH8g+mtHT/16Ca5USb4VK5yVOpe6qvOF0npB3X4/vRLeSldTIiRHqgsTS +vmKepVDfpwM= +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem new file mode 100644 index 000000000..33077494c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.full.crt.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIHuMIGhAhQAlAP9ARWhjyZiKpvsrEBxA/QxDDAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIzMTVaFw0yMjA3MTYxNzIz +MTVaMBYxFDASBgNVBAMMC3BlZXItbm9kZS0xMCowBQYDK2VwAyEAQE9NCCOIZ6LL +5hy006tebo9pttvoBEICUCH1GLCZv4owBQYDK2VwA0EA/8nuQ/4ECmBv/l0qPiYu +yJqHE9oj6AUcEQMg7ywkmjhnzOcbDptCws06ihQp4ayRegrOV38qzwjfFd26y4uN +BQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIH2MIGpAhR0B3TugfUYfp1leORxk57cBcgqSzAFBgMrZXAwHjEcMBoGA1UEAwwT +cGVlci1ub2RlLTEtYWNjb3VudDAeFw0yMTA3MDYxNzIzMTVaFw00MTA3MDExNzIz +MTVaMB4xHDAaBgNVBAMME3BlZXItbm9kZS0xLWFjY291bnQwKjAFBgMrZXADIQD4 +4NlAAllAcZQdq4GsRVQ5CT1K4LDcxF7jazCmHx0suDAFBgMrZXADQQCanluJA5xF +m0qJDFShnWKo5djj1B+PMKqzqDAxVRpQsdiMfuS0LMmTozf2vdcaWg2GPTGViwnv +E2q8u9kA/6YI +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.key.pem new file mode 100644 index 000000000..f2722b855 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..8eeb48e8e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..42bbab7e6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 1000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 1000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KDGJ2LY diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties new file mode 100644 index 000000000..15f703941 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = peer-node-1 +friendlyName = peer-node-1 +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json new file mode 100644 index 000000000..9a50e4703 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-api.json @@ -0,0 +1,137 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "65C787D4359617EF22B87190AEFC549EF002771058EAD74F684FBE4424F36FD2", + "endpoint": { + "host": "api-node-0", + "port": 7900 + }, + "metadata": { + "name": "api-node-0", + "roles": "Api" + } + }, + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..93d92444c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/server-config/resources/peers-p2p.json @@ -0,0 +1,170 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47", + "endpoint": { + "host": "peer-node-0", + "port": 7900 + }, + "metadata": { + "name": "peer-node-0", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..b846efcd5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/nodes/peer-node-1/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/preset.yml new file mode 100644 index 000000000..7e9e9e659 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/preset.yml @@ -0,0 +1,945 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 1d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1616694977s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 720 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500000 +votingSetGrouping: 720 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +assemblies: 'api, dual, peer' +networkDescription: Symbol Testnet +baseNamespace: symbol +currencyMosaicId: 091F837E059AE13C +harvestingMosaicId: 091F837E059AE13C +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA +namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +networkType: 152 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ +rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 311 +faucetUrl: 'http://localhost:100' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-501.testnet.symboldev.network:3000' + - 'http://ngl-dual-601.testnet.symboldev.network:3000' + - 'http://ngl-dual-001.testnet.symboldev.network:3000' + - 'http://ngl-dual-101.testnet.symboldev.network:3000' + - 'http://ngl-dual-201.testnet.symboldev.network:3000' + - 'http://ngl-dual-301.testnet.symboldev.network:3000' + - 'http://ngl-dual-401.testnet.symboldev.network:3000' + - 'http://ngl-dual-502.testnet.symboldev.network:3000' + - 'http://ngl-dual-602.testnet.symboldev.network:3000' + - 'http://ngl-api-001.testnet.symboldev.network:3000' + - 'http://ngl-api-101.testnet.symboldev.network:3000' +knownPeers: + api-node: + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api + peer-node: + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +explorerUrl: 'http://localhost:90' +databases: + - + name: db-0 + openPort: '27017' +nodes: + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + voting: true + api: false + name: peer-node-0 + friendlyName: peer-node-0 + host: peer-node-0 + openPort: '7900' + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + voting: true + api: false + name: peer-node-1 + friendlyName: peer-node-1 + host: peer-node-1 + openPort: '7901' + - + syncsource: false + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: false + api: true + friendlyName: api-node-0 + name: api-node-0 + host: api-node-0 + brokerName: api-node-broker-0 + brokerOpenPort: '8002' + databaseHost: db-0 + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' +gateways: + - + apiNodeName: api-node-0 + apiNodeHost: api-node-0 + apiNodeBrokerHost: api-node-broker-0 + name: rest-gateway-0 + description: '' + databaseHost: db-0 + openPort: '3000' + ipv4_address: 172.20.0.25 +wallets: [] +explorers: [] +faucets: [] +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: testnet +assembly: multinode +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} + - {} +networkIdentifier: public-test +networkName: publicTest diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/api-node-0-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/api-node-0-config.csv new file mode 100644 index 000000000..b2357cc3d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/api-node-0-config.csv @@ -0,0 +1,855 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://db-0:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; false +extension.syncsource; false +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; api-node-0; string; Node host (leave empty to auto-detect IP). +friendlyName; api-node-0; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/api-node-0-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/api-node-0-config.rst new file mode 100644 index 000000000..78358c956 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/api-node-0-config.rst @@ -0,0 +1,874 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db-0:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; false + extension.syncsource; false + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; api-node-0; string; Node host (leave empty to auto-detect IP). + friendlyName; api-node-0; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-0-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-0-config.csv new file mode 100644 index 000000000..206a88f9f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-0-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; peer-node-0; string; Node host (leave empty to auto-detect IP). +friendlyName; peer-node-0; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-0-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-0-config.rst new file mode 100644 index 000000000..c09df89ca --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-0-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; peer-node-0; string; Node host (leave empty to auto-detect IP). + friendlyName; peer-node-0; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-1-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-1-config.csv new file mode 100644 index 000000000..37a7927c5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-1-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; TCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KDGJ2LY; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; peer-node-1; string; Node host (leave empty to auto-detect IP). +friendlyName; peer-node-1; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-1-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-1-config.rst new file mode 100644 index 000000000..8e0e5b31d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-multinode-target/reports/peer-node-1-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; TCJ3TDSPFB7SXSUBLZQFYUZJDP5VCYO5KDGJ2LY; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; peer-node-1; string; Node host (leave empty to auto-detect IP). + friendlyName; peer-node-1; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/addresses.yml new file mode 100644 index 000000000..d2122c25f --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/addresses.yml @@ -0,0 +1,23 @@ +version: 2 +networkType: 152 +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +nodes: + - + name: node + friendlyName: 7ED1C14 + roles: Peer + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: TBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TBUWTY + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: TDYBCGC2IHGHEPURL6P62N46JTDMBHGXQNXQYJA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: TDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4CWJJNI diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/docker-compose.yml new file mode 100644 index 000000000..963e7712d --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2.4' +services: + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..57b338cb5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6848fd5d1 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..905416151 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..9daa77117 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..28ed919f7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..74a1a2588 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRSzoQv+2Qzr2zlowqcjo9hV3/pVDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxOFoXDTQxMDcwMTE3MjMxOFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA0s2bo5WjPXCdnFMZwSqEJFTZBNro +tvegmvFWSuAnIvX7xxZ46yyP9G0nyLs8NzBnegV9+B8xA7YErSUSKfcjCg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..d86edbc44 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAv0Lc7s4AYrmAJ5vecf/2q7VTaTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxOFoXDTIyMDcxNjE3MjMxOFowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAPpt9rIVJc9ACOi/s7YSy2/dCd9ZDX5B7mIR20zN +9xuLvdTmt8QjWYc8kXlRBrd5Nk8hql4atdQYL2yxwkX+/wI= +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..b0a0322ac --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAv0Lc7s4AYrmAJ5vecf/2q7VTaTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxOFoXDTIyMDcxNjE3MjMxOFowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6jPwVZhYwuvyYC+KVQ +xb3bC3EADEmYMAUGAytlcANBAPpt9rIVJc9ACOi/s7YSy2/dCd9ZDX5B7mIR20zN +9xuLvdTmt8QjWYc8kXlRBrd5Nk8hql4atdQYL2yxwkX+/wI= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhRSzoQv+2Qzr2zlowqcjo9hV3/pVDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMxOFoXDTQxMDcwMTE3MjMxOFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA0s2bo5WjPXCdnFMZwSqEJFTZBNro +tvegmvFWSuAnIvX7xxZ46yyP9G0nyLs8NzBnegV9+B8xA7YErSUSKfcjCg== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..1feee6a11 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..54d76fd20 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = +friendlyName = 7ED1C14 +version = 1.0.1.0 +roles = Peer + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/preset.yml new file mode 100644 index 000000000..7f0e80670 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/preset.yml @@ -0,0 +1,895 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 1d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1616694977s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 720 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500000 +votingSetGrouping: 720 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +assemblies: 'api, dual, peer' +networkDescription: Symbol Testnet +baseNamespace: symbol +currencyMosaicId: 091F837E059AE13C +harvestingMosaicId: 091F837E059AE13C +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA +namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +networkType: 152 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ +rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 311 +faucetUrl: 'http://faucet.testnet.symboldev.network' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-501.testnet.symboldev.network:3000' + - 'http://ngl-dual-601.testnet.symboldev.network:3000' + - 'http://ngl-dual-001.testnet.symboldev.network:3000' + - 'http://ngl-dual-101.testnet.symboldev.network:3000' + - 'http://ngl-dual-201.testnet.symboldev.network:3000' + - 'http://ngl-dual-301.testnet.symboldev.network:3000' + - 'http://ngl-dual-401.testnet.symboldev.network:3000' + - 'http://ngl-dual-502.testnet.symboldev.network:3000' + - 'http://ngl-dual-602.testnet.symboldev.network:3000' + - 'http://ngl-api-001.testnet.symboldev.network:3000' + - 'http://ngl-api-101.testnet.symboldev.network:3000' +knownPeers: + api-node: + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api + peer-node: + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nodes: + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + api: false + name: node + openPort: true +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: testnet +assembly: peer +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - {} +databases: [] +gateways: [] +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public-test +networkName: publicTest diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/reports/node-config.csv new file mode 100644 index 000000000..fb9b2690a --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; ; string; Node host (leave empty to auto-detect IP). +friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/reports/node-config.rst new file mode 100644 index 000000000..5e01f2ea5 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; ; string; Node host (leave empty to auto-detect IP). + friendlyName; 7ED1C14; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/addresses.yml b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/addresses.yml new file mode 100644 index 000000000..1563a524b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/addresses.yml @@ -0,0 +1,29 @@ +version: 2 +networkType: 152 +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +nodes: + - + name: node + friendlyName: myRegularNode + roles: 'Peer,Voting' + main: + publicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 + address: TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA + transport: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA2 + publicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 + address: TBRPTRAP4DZBS3WCDYIKRSC4JJDO5CYS6TBUWTY + remote: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA3 + publicKey: 76E72A5EBDBEF135F90F5E1DBDA7BE5BA53B7F710CF0A73D9AFD9FC37FA1D210 + address: TDYBCGC2IHGHEPURL6P62N46JTDMBHGXQNXQYJA + vrf: + privateKey: 0000000000000000000000000000000000000000000000000000000000AAAAA4 + publicKey: 20A8D90F0FC0938144A6E216D2822E65F1375DC261CC514B5181A130C16A6E3B + address: TDVXX7IL2RCPDSZCIDKQEFORQJXM53XL4CWJJNI + voting: + - + publicKey: 699B5C153608E1C1980EFA5B982411AD73AD66F72B46F979C84E4684A66E7AE3 + startEpoch: 311 + endEpoch: 1030 + filename: private_key_tree1.dat diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/docker-compose.yml b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/docker-compose.yml new file mode 100644 index 000000000..5de6d09f1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/docker-compose.yml @@ -0,0 +1,27 @@ +version: '2.4' +services: + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL false + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + networks: + default: + aliases: + - myRegularNode.host.com + hostname: myRegularNode.host.com +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/explorer/run.sh b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/mongoDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/server/start.sh b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/00001.dat b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..57b338cb5 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/00001.proof b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..6848fd5d1 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/00001.stmt b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..905416151 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/hashes.dat b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..9daa77117 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/proof.heights.dat b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/proof.index.dat b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..28ed919f7 Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nemesis/seed/proof.index.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/ca.cert.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..cf77f8f38 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQf1okYlrjSq75twAERkdTaBkcSXjAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzN1oXDTQxMDcwMTE3MjMzN1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA4giqnr3OFGVikvz25ZpzxHIuvz1w ++Z4Kc0Ni1C66UMm8dE5Olygoyq87hWm7rv10QUNmrHBwbngTbevDE4m5AQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/ca.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/ca.pubkey.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..d3b629098 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/MI2ySwEdmsra6tcmXv0tP0c= +-----END PUBLIC KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/metadata.yml b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..889dce391 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 57268927F24E44B2A4CEA33F0559858C2EBF2602F8A550C5BDDB0B71000C4998 +mainPublicKey: 7ED1C14DCD5644DF6DEB259072A77F308DB24B011D9ACADAEAD7265EFD2D3F47 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.cnf b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..3ed854529 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhM4W6xmf5/0qrn9iMDEyZzIkCsOMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzM3WhcNMjIwNzE2MTcyMzM3WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAaIVUP0taYYRov9sEYyFpnPRZeo+/4SBfR+pOFtzK +SieLmNIhp57MMldCrIOr7OrMKEe2Tw8Y/sOTjtxxpTcWBA== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.csr.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b2f418004 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAFcmiSfyTkSypM6j +PwVZhYwuvyYC+KVQxb3bC3EADEmYoAAwBQYDK2VwA0EAKUEgvWFd80u9QG2v/o0F +Y0OIaEl85/THFzoAS4ii+gJ/o3CH6z4fpXGEoGtwCrETQSwcbxJRnpJ8KWk6wx8i +Dg== +-----END CERTIFICATE REQUEST----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.full.crt.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..69eb678d0 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhM4W6xmf5/0qrn9iMDEyZzIkCsOMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzA2MTcyMzM3WhcNMjIwNzE2MTcyMzM3WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAVyaJJ/JORLKkzqM/BVmFjC6/JgL4pVDF +vdsLcQAMSZgwBQYDK2VwA0EAaIVUP0taYYRov9sEYyFpnPRZeo+/4SBfR+pOFtzK +SieLmNIhp57MMldCrIOr7OrMKEe2Tw8Y/sOTjtxxpTcWBA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQf1okYlrjSq75twAERkdTaBkcSXjAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcwNjE3MjMzN1oXDTQxMDcwMTE3MjMzN1owFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAftHBTc1WRN9t6yWQcqd/ +MI2ySwEdmsra6tcmXv0tP0cwBQYDK2VwA0EA4giqnr3OFGVikvz25ZpzxHIuvz1w ++Z4Kc0Ni1C66UMm8dE5Olygoyq87hWm7rv10QUNmrHBwbngTbevDE4m5AQ== +-----END CERTIFICATE----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.key.pem b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..9e56f3cb9 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqi +-----END PRIVATE KEY----- diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-database.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..a6deee0e3 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..db896d0a6 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = false +extension.partialtransaction = false + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-finalization.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..8eeb48e8e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 4m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..151538495 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA3 +harvesterVrfPrivateKey = 0000000000000000000000000000000000000000000000000000000000AAAAA4 + +enableAutoHarvesting = true +maxUnlockedAccounts = 20 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-inflation.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-messaging.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-network.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..c0d21c736 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = public-test +nemesisSignerPublicKey = 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +nodeEqualityStrategy = host +generationHashSeed = 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +epochAdjustment = 1616694977s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x091F'837E'059A'E13C +harvestingMosaicId = 0x091F'837E'059A'E13C + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 180 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 720 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 28 +maxVotingKeyLifetime = 720 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 1d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-node.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..0d2210cf1 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = true + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1 +localNetworks = 127.0.0.1 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = myRegularNode.host.com +friendlyName = myRegularNode +version = 1.0.1.0 +roles = Peer,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-pt.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-task.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-timesync.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-user.properties b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/peers-api.json b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..94c5e8b3e --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,126 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44", + "endpoint": { + "host": "ngl-dual-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-501", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7", + "endpoint": { + "host": "ngl-dual-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-601", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78", + "endpoint": { + "host": "ngl-dual-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-001", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079", + "endpoint": { + "host": "ngl-dual-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-101", + "roles": "Api,Peer" + } + }, + { + "publicKey": "C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8", + "endpoint": { + "host": "ngl-dual-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-201", + "roles": "Api,Peer" + } + }, + { + "publicKey": "4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C", + "endpoint": { + "host": "ngl-dual-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-301", + "roles": "Api,Peer" + } + }, + { + "publicKey": "EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089", + "endpoint": { + "host": "ngl-dual-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-401", + "roles": "Api,Peer" + } + }, + { + "publicKey": "093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142", + "endpoint": { + "host": "ngl-dual-502.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-502", + "roles": "Api,Peer" + } + }, + { + "publicKey": "53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197", + "endpoint": { + "host": "ngl-dual-602.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-dual-602", + "roles": "Api,Peer" + } + }, + { + "publicKey": "3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6", + "endpoint": { + "host": "ngl-api-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-001", + "roles": "Api" + } + }, + { + "publicKey": "904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F", + "endpoint": { + "host": "ngl-api-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-api-101", + "roles": "Api" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/peers-p2p.json b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..ed21373c2 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,159 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [ + { + "publicKey": "3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F", + "endpoint": { + "host": "ngl-beacon-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435", + "endpoint": { + "host": "ngl-beacon-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-601", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D", + "endpoint": { + "host": "ngl-beacon-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1", + "endpoint": { + "host": "ngl-beacon-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8", + "endpoint": { + "host": "ngl-beacon-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-beacon-401", + "roles": "Peer" + } + }, + { + "publicKey": "723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C", + "endpoint": { + "host": "ngl-peer-201.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-201", + "roles": "Peer" + } + }, + { + "publicKey": "DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837", + "endpoint": { + "host": "ngl-peer-301.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-301", + "roles": "Peer" + } + }, + { + "publicKey": "22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11", + "endpoint": { + "host": "ngl-peer-001.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-001", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE", + "endpoint": { + "host": "ngl-peer-101.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-101", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824", + "endpoint": { + "host": "ngl-peer-202.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-202", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C", + "endpoint": { + "host": "ngl-peer-302.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-302", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB", + "endpoint": { + "host": "ngl-peer-401.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-401", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE", + "endpoint": { + "host": "ngl-peer-501.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-501", + "roles": "Peer,Voting" + } + }, + { + "publicKey": "2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732", + "endpoint": { + "host": "ngl-peer-601.testnet.symboldev.network", + "port": 7900 + }, + "metadata": { + "name": "ngl-peer-601", + "roles": "Peer,Voting" + } + } + ] +} \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..505cd00ab Binary files /dev/null and b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/nodes/node/votingkeys/private_key_tree1.dat differ diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/preset.yml b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/preset.yml new file mode 100644 index 000000000..53dead009 --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/preset.yml @@ -0,0 +1,901 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 180 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 1d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1616694977s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 720 +minVotingKeyLifetime: 28 +mosaicRentalFee: 500000 +votingSetGrouping: 720 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 4m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 20 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +assemblies: 'api, dual, peer' +networkDescription: Symbol Testnet +baseNamespace: symbol +currencyMosaicId: 091F837E059AE13C +harvestingMosaicId: 091F837E059AE13C +nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 +harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA +namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A +mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA +nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 +networkType: 152 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ +rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 311 +faucetUrl: 'http://faucet.testnet.symboldev.network' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +knownRestGateways: + - 'http://ngl-dual-501.testnet.symboldev.network:3000' + - 'http://ngl-dual-601.testnet.symboldev.network:3000' + - 'http://ngl-dual-001.testnet.symboldev.network:3000' + - 'http://ngl-dual-101.testnet.symboldev.network:3000' + - 'http://ngl-dual-201.testnet.symboldev.network:3000' + - 'http://ngl-dual-301.testnet.symboldev.network:3000' + - 'http://ngl-dual-401.testnet.symboldev.network:3000' + - 'http://ngl-dual-502.testnet.symboldev.network:3000' + - 'http://ngl-dual-602.testnet.symboldev.network:3000' + - 'http://ngl-api-001.testnet.symboldev.network:3000' + - 'http://ngl-api-101.testnet.symboldev.network:3000' +knownPeers: + api-node: + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api + peer-node: + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nodes: + - + syncsource: true + filespooling: false + partialtransaction: false + addressextraction: false + mongo: false + zeromq: false + enableAutoSyncCleanup: true + harvesting: true + api: false + name: node + openPort: true + friendlyName: myRegularNode + host: myRegularNode.host.com + voting: true +privateKeySecurityMode: PROMPT_MAIN +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +version: 1 +preset: testnet +assembly: peer +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN + maxUnlockedAccounts: 20 + peersP2PListLimit: 10000 + peersApiListLimit: 10000 + restDeploymentToolVersion: 1.0.8 + restDeploymentToolLastUpdatedDate: '2021-07-05' + nodes: + - + friendlyName: myRegularNode + host: myRegularNode.host.com + voting: true +databases: [] +gateways: [] +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: public-test +networkName: publicTest diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/reports/node-config.csv b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/reports/node-config.csv new file mode 100644 index 000000000..a39cb2dea --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.0.8 + +config-database.properties +database +databaseUri; mongodb://:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; false +extension.partialtransaction; false +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; true +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 4m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 0m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; public-test; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; +epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 720; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). +friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Voting; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/reports/node-config.rst b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/reports/node-config.rst new file mode 100644 index 000000000..264d210be --- /dev/null +++ b/packages/bootstrap-core/test/expectedTargets/testnet-peer-voting-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.0.8 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; false + extension.partialtransaction; false + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; true + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 4m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 0m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 20; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; TCR4O62LYKKDYHXW5AAOKD2IT5Q4TC2U4Q6NJVA; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; public-test; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; + epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 720; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; myRegularNode.host.com; string; Node host (leave empty to auto-detect IP). + friendlyName; myRegularNode; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Voting; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/test/full_preset.yml b/packages/bootstrap-core/test/full_preset.yml similarity index 100% rename from test/full_preset.yml rename to packages/bootstrap-core/test/full_preset.yml diff --git a/test/mainnet_preset.yml b/packages/bootstrap-core/test/mainnet_preset.yml similarity index 100% rename from test/mainnet_preset.yml rename to packages/bootstrap-core/test/mainnet_preset.yml diff --git a/test/mainnet_preset_non_voting.yml b/packages/bootstrap-core/test/mainnet_preset_non_voting.yml similarity index 100% rename from test/mainnet_preset_non_voting.yml rename to packages/bootstrap-core/test/mainnet_preset_non_voting.yml diff --git a/test/mainnet_preset_voting.yml b/packages/bootstrap-core/test/mainnet_preset_voting.yml similarity index 100% rename from test/mainnet_preset_voting.yml rename to packages/bootstrap-core/test/mainnet_preset_voting.yml diff --git a/test/mocha.opts b/packages/bootstrap-core/test/mocha.opts similarity index 100% rename from test/mocha.opts rename to packages/bootstrap-core/test/mocha.opts diff --git a/test/nodeCertificates/ca.cert.pem b/packages/bootstrap-core/test/nodeCertificates/ca.cert.pem similarity index 100% rename from test/nodeCertificates/ca.cert.pem rename to packages/bootstrap-core/test/nodeCertificates/ca.cert.pem diff --git a/test/nodeCertificates/ca.cnf b/packages/bootstrap-core/test/nodeCertificates/ca.cnf similarity index 100% rename from test/nodeCertificates/ca.cnf rename to packages/bootstrap-core/test/nodeCertificates/ca.cnf diff --git a/test/nodeCertificates/ca.pubkey.pem b/packages/bootstrap-core/test/nodeCertificates/ca.pubkey.pem similarity index 100% rename from test/nodeCertificates/ca.pubkey.pem rename to packages/bootstrap-core/test/nodeCertificates/ca.pubkey.pem diff --git a/test/nodeCertificates/metadata.yml b/packages/bootstrap-core/test/nodeCertificates/metadata.yml similarity index 100% rename from test/nodeCertificates/metadata.yml rename to packages/bootstrap-core/test/nodeCertificates/metadata.yml diff --git a/test/nodeCertificates/node.cnf b/packages/bootstrap-core/test/nodeCertificates/node.cnf similarity index 100% rename from test/nodeCertificates/node.cnf rename to packages/bootstrap-core/test/nodeCertificates/node.cnf diff --git a/test/nodeCertificates/node.crt.pem b/packages/bootstrap-core/test/nodeCertificates/node.crt.pem similarity index 100% rename from test/nodeCertificates/node.crt.pem rename to packages/bootstrap-core/test/nodeCertificates/node.crt.pem diff --git a/test/nodeCertificates/node.csr.pem b/packages/bootstrap-core/test/nodeCertificates/node.csr.pem similarity index 100% rename from test/nodeCertificates/node.csr.pem rename to packages/bootstrap-core/test/nodeCertificates/node.csr.pem diff --git a/test/nodeCertificates/node.full.crt.pem b/packages/bootstrap-core/test/nodeCertificates/node.full.crt.pem similarity index 100% rename from test/nodeCertificates/node.full.crt.pem rename to packages/bootstrap-core/test/nodeCertificates/node.full.crt.pem diff --git a/test/nodeCertificates/node.key.pem b/packages/bootstrap-core/test/nodeCertificates/node.key.pem similarity index 100% rename from test/nodeCertificates/node.key.pem rename to packages/bootstrap-core/test/nodeCertificates/node.key.pem diff --git a/packages/bootstrap-core/test/override-currency-preset.yml b/packages/bootstrap-core/test/override-currency-preset.yml new file mode 100644 index 000000000..0cda335f2 --- /dev/null +++ b/packages/bootstrap-core/test/override-currency-preset.yml @@ -0,0 +1,4 @@ +preset: dualCurrency +nemesis: + mosaics: + - accounts: 20 diff --git a/packages/bootstrap-core/test/profiles/wallet-profile-test.json b/packages/bootstrap-core/test/profiles/wallet-profile-test.json new file mode 100644 index 000000000..f224fd1fd --- /dev/null +++ b/packages/bootstrap-core/test/profiles/wallet-profile-test.json @@ -0,0 +1,73 @@ +{ + "profiles": { + "version": 5, + "data": { + "test": { + "profileName": "test", + "accounts": ["19A1C8D4814ED6C5", "0754991E871DF71C", "96F17E63B63D7B8E"], + "seed": "4d99056862429be98ee0d862329364db906cad9b55fe77c7c9406224a47d7edd1fllY3kHRUKFvvkso48aUH0l0io3CKHOlhbk8EdFj2YPwOorcmWCYPDmzpU7iKHAGHF33HrXfdth+is3RFkhyAthLVAEe/aM50VPoVrK45d59P8S+gyxYKePcA06/PDQr7mPgIQ4ZwMOI7er/Xib99pDIyMAXmj4p+TdErI7hUc214DFx3hcwssiSsezwkq4Xk46VhRfKIwvcRMUt6oS7g==", + "password": "AAA42FD3FDEA5E8DEC89B5B5364D54D8BA98722B06DC669742C3AE519F07B6D2ED4797FA20DC9995125BC8C7CBDE6BD6B0603CEB6D08CD58CA1A965EAE7D4A25", + "hint": "", + "networkType": 152, + "generationHash": "6C1B92391CCB41C96478471C2634C111D9E989DECD66130C0430B5B8D20117CD" + } + } + }, + "accounts": { + "version": 4, + "data": { + "694DD72A1B4A5D19": { + "id": "694DD72A1B4A5D19", + "profileName": "test", + "name": "Seed Account 1", + "node": "", + "type": 1, + "address": "TAH24WMWMTO5OYBA7JV7WFNN3PLE5CQHEYZR2EY", + "publicKey": "904C0AF0A503F4828DB055495EA3CC42700FA4FAC8A85465A7CF168644545C1E", + "encryptedPrivateKey": "6dc5c1d2a445183284619647106b0fd394372f41840dd1d64e12f6db8bac95cf6LcSjpJf/XQy1Yo/UwpMxqa2wRMXMsRnJvSJ5+DLHIHAoMLdCFBxWtQiEPgXUCC5dV+HlJeviNrRvjkbjLHBTtg/dxZ/khT/EgdiSfKrSLc=", + "path": "m/44'/4343'/0'/0'/0'", + "isMultisig": false, + "encRemoteAccountPrivateKey": "3542f81fd19b2dc4202b0b49ab6ae7c948d77d9dc493ac07ec6b67f5732b5f4bGjOyczzmIhepXcPkcrP/kKHRG1C0U/VWya7pvQ8dgMm/jzp1cuqfP67CPkIKopUpmDmdBtfIiLCJl+N+u2vR6RLjOQVgZnZdiCPKpcwN2rY=" + }, + "19A1C8D4814ED6C5": { + "id": "19A1C8D4814ED6C5", + "profileName": "test", + "name": "account 1", + "node": "", + "type": 1, + "address": "TAI4NEL4SBQDSPY2XKMPIGOC53UALIXJ5WHRJVQ", + "publicKey": "1C8557E7A5E61BFFF2852BFB79A1EE53AB58F2200BDCE7271063BB00697CB66D", + "encryptedPrivateKey": "9874bbf36dbd0f68ada927c278d38a97cf9dd66c4c6ee70c1ee130b23d54001fmeWYBkK/fY7Wuk6L01c6cURynREkLMTGvQdjk4IFX+qib3X3iVL1U1cNRHFzqQrRu04+ctyjB5Cj8SjApfUknbm1hjWtU/2TuTPA2Zi4j4Q=", + "path": "m/44'/4343'/0'/0'/0'", + "isMultisig": false, + "encRemoteAccountPrivateKey": "fda9648e671b72ecb5611115ef4e14e26a0bf9332c1c9e5b1f65542201a16cb4UJIBB3EKS7VoOfI8GKS5Y8Rl3bubmAIbghRAyRi1enBsQoQSLLoFQZpnKX2xpy6ql+MJpTvjyFV8cx6NSg1f0zMERvtG5RB/TDQhLtqOmrs=" + }, + "0754991E871DF71C": { + "id": "0754991E871DF71C", + "profileName": "test", + "name": "multisig", + "node": "", + "type": 1, + "address": "TAWBSSHIKZNX6E65FJG4BVIJR236Z64Z77CMOJA", + "publicKey": "50FBE087E7261CE6E8A804CA0E0CFD1B065ABBBA668E0248FC8F0C268AAB3827", + "encryptedPrivateKey": "68843e69f0df9ad39fea8062dd61ee7e8b81fd55bc7dc61127847ad4d6f621b745BL6Pz1MXhLiOcWrWO1AXsda1MQoF8G0KZJVW8Pzh5tXxCZ9RRfuFxAUWUkC1dLHYAbFGkWbphnQuERA9YC8aqTWJsmjZU1K1PZqS9lRF0=", + "path": "m/44'/4343'/1'/0'/0'", + "isMultisig": false, + "encRemoteAccountPrivateKey": "4d67b6ba6877197a0e4ba5e85036f183594f17ca6f3404e6ac5a9f1fe8e59b8cYjqFCgKbwSL+rXCmMWclFNtm7iQXUmdZ8UHRyhBUnEhmrewPcEiHtvn3vtViFX6wk7EZ9Tpp8gXsOoksbiSbz7gPxdiQsmYNotApBBPAH4o=" + }, + "96F17E63B63D7B8E": { + "id": "96F17E63B63D7B8E", + "profileName": "test", + "name": "account 3", + "node": "", + "type": 1, + "address": "TDTZLYALSDGWBW5ZJJYKOM65YFHELZHGEEUDZ7A", + "publicKey": "7E8CFEE6210BAAE2A07E55473935981DE89F7737AE8034110E20976221B24A60", + "encryptedPrivateKey": "3e876f06e0a6de763ee79b79b576842096031f8b1c683468be519bd9770c5fa6sPds/Nd3HxtAf6K0QCx31lz7NmLZqIfbZZNLvYhkW0KXf3XygKp9tdulPM646RESyY/HUZaKwYwtAQk6vr/FrH/21F61XCjS3zvNhqCBXhw=", + "path": "m/44'/4343'/2'/0'/0'", + "isMultisig": false + } + } + }, + "mosaicConfiguration": {} +} diff --git a/test/repeat_preset.yml b/packages/bootstrap-core/test/repeat_preset.yml similarity index 100% rename from test/repeat_preset.yml rename to packages/bootstrap-core/test/repeat_preset.yml diff --git a/packages/bootstrap-core/test/service/AgentCertificateService.test.ts b/packages/bootstrap-core/test/service/AgentCertificateService.test.ts new file mode 100644 index 000000000..96a176792 --- /dev/null +++ b/packages/bootstrap-core/test/service/AgentCertificateService.test.ts @@ -0,0 +1,69 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { expect } from 'chai'; +import { promises as fsPromises, readFileSync } from 'fs'; +import 'mocha'; +import { join } from 'path'; +import { LoggerFactory, LogType } from '../../src'; +import { AgentCertificateService, BootstrapUtils, ConfigLoader, DefaultAccountResolver, Preset } from '../../src/service'; + +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); +describe('AgentCertificateService', () => { + it('createCertificate', async () => { + const target = 'target/tests/AgentCertificateService'; + await BootstrapUtils.deleteFolder(logger, target); + await BootstrapUtils.mkdir(target); + const service = new AgentCertificateService(logger, { + target: target, + user: await BootstrapUtils.getDockerUserGroup(logger), + accountResolver: new DefaultAccountResolver(), + }); + + const presetData = new ConfigLoader(logger).createPresetData({ + preset: Preset.dualCurrency, + password: 'abc', + workingDir: BootstrapUtils.defaultWorkingDir, + }); + + await service.run( + presetData.networkType, + presetData.symbolServerImage, + 'supernode', + { + agent: { + privateKey: '8D1929CAC89295BE7DBE26B7F830AA42A74D75D7055117DF2973001E3271BDD9', + publicKey: '04794EE7BD0810057870C7739C985D42BB4AAA4B1B9E3A71BFE6373A72D63726', + }, + }, + target, + ); + + const files = await fsPromises.readdir(target); + expect(files).deep.eq([ + 'agent-ca.cnf', + 'agent-ca.csr.pem', + 'agent-ca.key.pem', + 'agent-ca.pubkey.pem', + 'agent-comm.cnf', + 'metadata.yml', + ]); + + files.forEach((f) => { + expect(readFileSync(join(target, f))).deep.eq(readFileSync(join('test', 'agentCertificates', f))); + }); + }); +}); diff --git a/packages/bootstrap-core/test/service/BootstrapService.e2e.ts b/packages/bootstrap-core/test/service/BootstrapService.e2e.ts new file mode 100644 index 000000000..a1407e963 --- /dev/null +++ b/packages/bootstrap-core/test/service/BootstrapService.e2e.ts @@ -0,0 +1,187 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { expect } from 'chai'; +import 'mocha'; +import { Account, Deadline, PlainMessage, RepositoryFactoryHttp, TransactionService, TransferTransaction, UInt64 } from 'symbol-sdk'; +import { LoggerFactory, LogType } from '../../src'; +import { BootstrapService, BootstrapUtils, ConfigLoader, ConfigResult, ConfigService, Preset, StartParams } from '../../src/service'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); +describe('BootstrapService', () => { + const timeout = 60000; + + //TODO Fix the transfer test! + async function transferTest(configResult: ConfigResult): Promise { + const repositoryFactory = new RepositoryFactoryHttp('http://localhost:3000'); + const networkType = await repositoryFactory.getNetworkType().toPromise(); + const generationHash = await repositoryFactory.getGenerationHash().toPromise(); + + const nemesisAccounts = configResult.addresses?.mosaics?.[0].accounts.map((n) => n.privateKey); + if (!nemesisAccounts || !nemesisAccounts[0]) { + throw new Error('Nemesis accounts could not be loaded!'); + } + const account = Account.createFromPrivateKey(nemesisAccounts[0], networkType); + + const listener = repositoryFactory.createListener(); + try { + await listener.open(); + const transactionService = new TransactionService( + repositoryFactory.createTransactionRepository(), + repositoryFactory.createReceiptRepository(), + ); + const { currency } = await repositoryFactory.getCurrencies().toPromise(); + const mosaic = currency.createRelative(10); + + const maxFee = UInt64.fromUint(10000000); + + const recipient = Account.generateNewAccount(networkType); + + const epochAdjustment = await repositoryFactory.getEpochAdjustment().toPromise(); + const transferTransaction = TransferTransaction.create( + Deadline.create(epochAdjustment), + recipient.address, + [mosaic], + PlainMessage.create('test-message'), + networkType, + maxFee, + ); + await BootstrapUtils.sleep(100); + const signedTransaction = account.sign(transferTransaction, generationHash); + console.log(`Announcing transaction hash http://localhost:3000/transactions/unconfirmed/${signedTransaction.hash}`); + const announcedTransaction = await transactionService.announce(signedTransaction, listener).toPromise(); + console.log('Confirmed!!!'); + expect(announcedTransaction.signer?.address.plain()).eq(account.publicAccount.address.plain()); + } finally { + if (listener.isOpen()) { + await listener.close(); + } + } + } + async function basicTestNetwork(configResult: ConfigResult): Promise { + const repositoryFactory = new RepositoryFactoryHttp('http://localhost:3000'); + const networkType = await repositoryFactory.getNetworkType().toPromise(); + const generationHash = await repositoryFactory.getGenerationHash().toPromise(); + expect(configResult.presetData).not.null; + expect(configResult.addresses).not.null; + expect(configResult.addresses.networkType).eq(networkType); + expect(configResult.presetData.networkType).eq(networkType); + expect(configResult.addresses.nemesisGenerationHashSeed).eq(generationHash); + expect(configResult.presetData.nemesisGenerationHashSeed).eq(generationHash); + } + + it('bootstrap start', async () => { + const service = new BootstrapService(logger); + const config: StartParams = { + ...ConfigService.defaultParams, + preset: Preset.dualCurrency, + reset: true, + timeout, + pullImages: true, + healthCheck: true, + target: 'target/tests/bootstrap-test', + detached: true, + user: BootstrapUtils.CURRENT_USER, + }; + await service.stop(config); + const configResult = await service.start(config); + try { + await basicTestNetwork(configResult); + } finally { + await service.stop(config); + } + }); + + it('bootstrap light', async () => { + const service = new BootstrapService(logger); + const config: StartParams = { + ...ConfigService.defaultParams, + preset: Preset.dualCurrency, + assembly: 'light', + reset: true, + timeout, + healthCheck: true, + pullImages: true, + target: 'target/tests/light-test', + detached: true, + user: BootstrapUtils.CURRENT_USER, + }; + try { + await service.stop(config); + const configResult = await service.start(config); + await basicTestNetwork(configResult); + } finally { + await service.stop(config); + } + }); + + it('testnet dual', async () => { + const service = new BootstrapService(logger); + const config: StartParams = { + ...ConfigService.defaultParams, + preset: Preset.testnet, + assembly: 'dual', + reset: true, + timeout, + healthCheck: true, + pullImages: true, + target: 'target/tests/testnet-dual', + detached: true, + user: BootstrapUtils.CURRENT_USER, + }; + try { + await service.stop(config); + const configResult = await service.start(config); + await basicTestNetwork(configResult); + } finally { + await service.stop(config); + } + }); + + it('mainnet dual', async () => { + const service = new BootstrapService(logger); + const config: StartParams = { + ...ConfigService.defaultParams, + preset: Preset.mainnet, + assembly: 'dual', + reset: true, + timeout, + healthCheck: true, + pullImages: true, + target: 'target/tests/mainnet-dual', + detached: true, + user: BootstrapUtils.CURRENT_USER, + }; + try { + await service.stop(config); + const configResult = await service.start(config); + await basicTestNetwork(configResult); + } finally { + await service.stop(config); + } + }); + + // For some reason transfer test works in this test. + it.skip('Basic Test Running Network', async () => { + const loader = new ConfigLoader(logger); + const target = 'target/tests/bootstrap-test'; + const presetData = loader.loadExistingPresetData(target, false); + const addresses = loader.loadExistingAddresses(target, false); + // Here you can write unit tests against a localhost:3000 network + const configResult = { presetData, addresses }; + await basicTestNetwork(configResult); + await transferTest(configResult); + }); +}); diff --git a/packages/bootstrap-core/test/service/BootstrapService.test.ts b/packages/bootstrap-core/test/service/BootstrapService.test.ts new file mode 100644 index 000000000..75c57f4f8 --- /dev/null +++ b/packages/bootstrap-core/test/service/BootstrapService.test.ts @@ -0,0 +1,361 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { expect } from 'chai'; +import { compareSync, Result } from 'dir-compare'; +import { copyFileSync, existsSync, readFileSync, writeFileSync } from 'fs'; +import 'mocha'; +import { join } from 'path'; +import { Account, Address, Convert, KeyPair, NetworkType } from 'symbol-sdk'; +import { LoggerFactory, LogType, PrivateKeySecurityMode } from '../../src'; +import { CustomPreset } from '../../src/model'; +import { + Assembly, + BootstrapService, + BootstrapUtils, + ConfigLoader, + ConfigParams, + ConfigResult, + DefaultAccountResolver, + Preset, + RewardProgram, + VotingKeyFile, + VotingKeyFileProvider, + VotingKeyParams, + VotingUtils, +} from '../../src/service'; + +const toKey = (prefix: string, keySize = 64): string => { + return prefix.padStart(keySize, '0'); +}; + +const toPublicKey = (prefix: string, keySize = 64): string => { + return Convert.uint8ToHex(KeyPair.createKeyPairFromPrivateKeyString(prefix.padStart(keySize, '0')).publicKey); +}; + +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); +/** + * Not random voting key provider. + */ +export class UnitTestVotingKeyFileProvider implements VotingKeyFileProvider { + public async createVotingFile({ + presetData, + nodePreset, + votingKeysFolder, + privateKeyTreeFileName, + votingKeyStartEpoch, + votingKeyEndEpoch, + }: VotingKeyParams): Promise { + const privateKeySuffix = Convert.utf8ToHex(nodePreset.name); + const secret = toKey(privateKeySuffix); + const votingAccount = Account.createFromPrivateKey(secret, presetData.networkType); + const votingPrivateKey = votingAccount.privateKey; + const votingUtils = new VotingUtils(); + const unitTestPrivateKeys: Uint8Array[] = []; + for (let i = votingKeyStartEpoch; i < votingKeyEndEpoch + 1; i++) { + unitTestPrivateKeys.push(Convert.hexToUint8(toKey(i + privateKeySuffix))); + } + const votingFile = await votingUtils.createVotingFile( + votingPrivateKey, + votingKeyStartEpoch, + votingKeyEndEpoch, + unitTestPrivateKeys, + ); + writeFileSync(join(votingKeysFolder, privateKeyTreeFileName), votingFile); + return { + publicKey: votingAccount.publicKey, + startEpoch: votingKeyStartEpoch, + endEpoch: votingKeyEndEpoch, + filename: privateKeyTreeFileName, + }; + } +} + +const customPreset: CustomPreset = { + privateKeySecurityMode: PrivateKeySecurityMode.PROMPT_MAIN, + maxUnlockedAccounts: 20, + peersP2PListLimit: 10000, + peersApiListLimit: 10000, + restDeploymentToolVersion: '1.0.8', + restDeploymentToolLastUpdatedDate: '2021-07-05', + nodes: [ + { + mainPrivateKey: '{{$index}}' + toKey('AAAAA1', 63), + transportPrivateKey: '{{$index}}' + toKey('AAAAA2', 63), + remotePrivateKey: '{{$index}}' + toKey('AAAAA3', 63), + vrfPrivateKey: '{{$index}}' + toKey('AAAAA4', 63), + agentPrivateKey: '{{$index}}' + toKey('AAAAA5', 63), + }, + ], +}; + +const multinodeCustomPreset: CustomPreset = { + nodes: [ + { + mainPrivateKey: '{{$index}}' + toKey('AAAAA1', 63), + transportPrivateKey: '{{$index}}' + toKey('AAAAA2', 63), + remotePrivateKey: '{{$index}}' + toKey('AAAAA3', 63), + vrfPrivateKey: '{{$index}}' + toKey('AAAAA4', 63), + agentPrivateKey: '{{$index}}' + toKey('AAAAA5', 63), + }, + { + mainPrivateKey: '{{$index}}' + toKey('BBBBB1', 63), + transportPrivateKey: '{{$index}}' + toKey('BBBBB2', 63), + remotePrivateKey: '{{$index}}' + toKey('BBBBB3', 63), + vrfPrivateKey: '{{$index}}' + toKey('BBBBB4', 63), + agentPrivateKey: '{{$index}}' + toKey('BBBBB5', 63), + }, + ], +}; + +const newNetworkType = NetworkType.PRIVATE_TEST; +const bootstrapCustomPreset: CustomPreset = { + networkType: newNetworkType, + nemesis: { + nemesisSignerPrivateKey: toKey('AAAA'), + mosaics: [ + { + accounts: [toPublicKey('A1'), toPublicKey('A2'), toPublicKey('A3')], + }, + { + accounts: [toPublicKey('B1'), toPublicKey('B2'), toPublicKey('B3')], + }, + ], + }, + sinkAddress: Address.createFromPublicKey(toKey('BBB'), newNetworkType).plain(), + nemesisGenerationHashSeed: toKey('CCC'), +}; + +const singleCurrencyCustomPreset: CustomPreset = { + networkType: newNetworkType, + nemesis: { + nemesisSignerPrivateKey: toKey('AAAA'), + mosaics: [ + { + accounts: [toPublicKey('A1'), toPublicKey('A2'), toPublicKey('A3')], + }, + ], + }, + sinkAddress: Address.createFromPublicKey(toKey('BBB'), newNetworkType).plain(), + nemesisGenerationHashSeed: toKey('CCC'), +}; + +describe('BootstrapService config', () => { + const presets = Object.values(Preset); + const assemblies = Object.values(Assembly); + + async function basicConfigTest(preset: string, assembly: string, constPresetObject: CustomPreset, targetFolderName: string) { + const service = new BootstrapService(logger); + const target = `target/tests/${targetFolderName}`; + const expectedTarget = `test/expectedTargets/${targetFolderName}`; + const config: ConfigParams = { + preset: preset, + assembly: assembly, + report: true, + reset: true, + offline: true, + upgrade: false, + target: target, + workingDir: BootstrapUtils.defaultWorkingDir, + version: '1.0.8', + customPresetObject: constPresetObject, + votingKeyFileProvider: new UnitTestVotingKeyFileProvider(), + accountResolver: new DefaultAccountResolver(), + user: BootstrapUtils.CURRENT_USER, + }; + + async function runConfig(description: string, configRunner: () => Promise) { + const patch = true; + console.log(); + console.log(`Running '${description}'`); + console.log(); + const configResult = await configRunner(); + const dockerCompose = await service.compose({ ...config, upgrade: true, user: '1000:1000' }); + expect(configResult.presetData).to.not.null; + expect(dockerCompose).to.not.undefined; + if (!existsSync(expectedTarget)) { + await BootstrapUtils.generateConfiguration({}, target, expectedTarget); + } + const compareResult: Result = compareSync(target, expectedTarget, { + compareSize: true, + compareContent: true, + skipEmptyDirs: true, + excludeFilter: '*.pem', + }); + const differences = compareResult.diffSet?.filter((s) => s.state != 'equal') || []; + const report = BootstrapUtils.toYaml(differences); + + const differentContents = differences + .filter( + (d) => + d.state == 'distinct' && + (d.reason == 'different-content' || d.reason == 'different-size') && + d.type1 == 'file' && + d.type2 == 'file' && + d.path1 && + d.path2, + ) + .map((d) => { + console.log(d); + if (patch) { + copyFileSync(join(d.path1!, d.name1!), join(d.path2!, d.name2!)); + } + const content1 = readFileSync(join(d.path1!, d.name1!), { encoding: 'utf-8' }); + const content2 = readFileSync(join(d.path2!, d.name2!), { encoding: 'utf-8' }); + return { ...d, content1, content2 }; + }); + + if (differentContents.length) { + const diff = differentContents.reduce( + (r, d) => { + return { + content1: `${r.content1}${join(d.path1!, d.name1!)}\n\n${d.content1}\n\n\n`, + content2: `${r.content2}${join(d.path2!, d.name2!)}\n\n${d.content2}\n\n\n`, + }; + }, + { + content1: '', + content2: '', + }, + ); + expect(diff.content1, `there are differences between folders!. Report:\n\n${report}`).equals(diff.content2); + } else { + expect(compareResult.differences, `there are differences between folders!. Report:\n\n${report}`).equals(0); + } + } + await runConfig('reset', () => service.config({ ...config, upgrade: true, reset: true })); + await runConfig('upgrade', () => service.config({ ...config, upgrade: true, reset: false })); + await runConfig('upgrade no params', () => + service.config({ + report: true, + offline: true, + target: target, + user: BootstrapUtils.CURRENT_USER, + workingDir: BootstrapUtils.defaultWorkingDir, + version: '1.0.8', + upgrade: true, + reset: false, + accountResolver: new DefaultAccountResolver(), + }), + ); + } + const loader = new ConfigLoader(logger); + for (const preset of presets) { + for (const assembly of assemblies) { + const targetFolderName = `${preset}-${assembly}-target`; + it(`${targetFolderName} test`, () => { + return basicConfigTest( + preset, + assembly, + loader.mergePresets( + customPreset, + assembly == Assembly.multinode ? multinodeCustomPreset : undefined, + preset == Preset.dualCurrency + ? bootstrapCustomPreset + : preset == Preset.singleCurrency + ? singleCurrencyCustomPreset + : undefined, + ), + targetFolderName, + ); + }); + } + } + + for (const preset of [Preset.mainnet, Preset.testnet]) { + for (const assembly of [Assembly.peer, Assembly.dual, Assembly.demo, Assembly.demo]) { + const targetFolderName = `${preset}-${assembly}-voting-target`; + it(`${targetFolderName} test`, () => { + return basicConfigTest( + preset, + assembly, + loader.mergePresets(customPreset, { + nodes: [ + { + friendlyName: 'myRegularNode', + host: 'myRegularNode.host.com', + voting: true, + }, + ], + }), + targetFolderName, + ); + }); + } + } + for (const preset of [Preset.testnet]) { + for (const assembly of [Assembly.dual]) { + const targetFolderName = `${preset}-${assembly}-encrypt-target`; + it(`${targetFolderName} test`, () => { + return basicConfigTest( + preset, + assembly, + loader.mergePresets(customPreset, { + privateKeySecurityMode: PrivateKeySecurityMode.ENCRYPT, + nodes: [ + { + friendlyName: 'myRegularNode', + host: 'myRegularNode.host.com', + }, + ], + }), + targetFolderName, + ); + }); + } + } + + for (const preset of [Preset.mainnet, Preset.testnet]) { + for (const assembly of [Assembly.dual]) { + const targetFolderName = `${preset}-${assembly}-supernode-target`; + it(`${targetFolderName} test`, () => { + return basicConfigTest( + preset, + assembly, + loader.mergePresets(customPreset, { + nodes: [ + { + friendlyName: 'mySupernode', + host: 'mySupernode.host.com', + voting: true, + rewardProgram: RewardProgram.SuperNode, + }, + ], + }), + targetFolderName, + ); + }); + } + } + + for (const preset of ['test/unit-test-profiles/custom-network.yml']) { + for (const assembly of [Assembly.dual, Assembly.multinode]) { + const targetFolderName = `custom-network-${assembly}-target`; + it(`${targetFolderName} test`, () => { + return basicConfigTest( + preset, + assembly, + loader.mergePresets( + customPreset, + assembly == Assembly.multinode ? multinodeCustomPreset : undefined, + bootstrapCustomPreset, + ), + targetFolderName, + ); + }); + } + } +}); diff --git a/test/service/BootstrapUtils.test.ts b/packages/bootstrap-core/test/service/BootstrapUtils.test.ts similarity index 87% rename from test/service/BootstrapUtils.test.ts rename to packages/bootstrap-core/test/service/BootstrapUtils.test.ts index 2925b6d15..e3f50a66a 100644 --- a/test/service/BootstrapUtils.test.ts +++ b/packages/bootstrap-core/test/service/BootstrapUtils.test.ts @@ -14,22 +14,24 @@ * limitations under the License. */ -import { expect } from '@oclif/test'; +import { expect } from 'chai'; import { statSync } from 'fs'; import * as _ from 'lodash'; import 'mocha'; import { it } from 'mocha'; import { totalmem } from 'os'; import { Account, NetworkType } from 'symbol-sdk'; +import { LoggerFactory, LogType } from '../../src'; import { ConfigAccount } from '../../src/model'; import { BootstrapUtils, ConfigLoader, CryptoUtils } from '../../src/service'; import assert = require('assert'); +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); describe('BootstrapUtils', () => { it('BootstrapUtils dockerUserId', async () => { - const user1 = await BootstrapUtils.getDockerUserGroup(); - const user2 = await BootstrapUtils.getDockerUserGroup(); - const user3 = await BootstrapUtils.getDockerUserGroup(); + const user1 = await BootstrapUtils.getDockerUserGroup(logger); + const user2 = await BootstrapUtils.getDockerUserGroup(logger); + const user3 = await BootstrapUtils.getDockerUserGroup(logger); assert.strictEqual(user1, user2); assert.strictEqual(user1, user3); }); @@ -41,7 +43,7 @@ describe('BootstrapUtils', () => { for (let i = 0; i < 10; i++) { console.log(); - const account = ConfigLoader.toConfig(Account.generateNewAccount(networkType)); + const account = ConfigLoader.toConfigFromAccount(Account.generateNewAccount(networkType)); balances.push({ ...account, balance: 1000000 }); } console.log(BootstrapUtils.toYaml({ nemesisBalances: balances })); @@ -62,7 +64,7 @@ describe('BootstrapUtils', () => { const expectedSize = 177762; async function download(): Promise { - const result = await BootstrapUtils.download('https://homepages.cae.wisc.edu/~ece533/images/boat.png', 'boat.png'); + const result = await BootstrapUtils.download(logger, 'https://homepages.cae.wisc.edu/~ece533/images/boat.png', 'boat.png'); expect(statSync('boat.png').size).eq(expectedSize); return result.downloaded; } @@ -82,7 +84,7 @@ describe('BootstrapUtils', () => { it('BootstrapUtils.download when invalid', async () => { BootstrapUtils.deleteFile('boat.png'); try { - await BootstrapUtils.download('https://homepages.cae.wisc.edu/~ece533/images/invalid-boat.png', 'boat.png'); + await BootstrapUtils.download(logger, 'https://homepages.cae.wisc.edu/~ece533/images/invalid-boat.png', 'boat.png'); expect(false).eq(true); } catch (e) { expect(e.message).eq('Server responded with 404: Not Found'); @@ -120,24 +122,24 @@ describe('BootstrapUtils', () => { }); it('BootstrapUtils.loadYaml', async () => { - expect(CryptoUtils.encryptedCount(BootstrapUtils.loadYaml('test/encrypted.yml', '1234'))).to.be.eq(0); + expect(CryptoUtils.encryptedCount(await BootstrapUtils.loadYaml('test/encrypted.yml', '1234'))).to.be.eq(0); try { - BootstrapUtils.loadYaml('test/encrypted.yml', 'abc'); + await BootstrapUtils.loadYaml('test/encrypted.yml', 'abc'); expect(1).eq(0); } catch (e) { expect(e.message).eq('Password is too short. It should have at least 4 characters!'); } try { - BootstrapUtils.loadYaml('test/encrypted.yml', 'abcd'); + await BootstrapUtils.loadYaml('test/encrypted.yml', 'abcd'); expect(1).eq(0); } catch (e) { expect(e.message).eq('Cannot decrypt file test/encrypted.yml. Have you used the right password?'); } try { - BootstrapUtils.loadYaml('test/encrypted.yml', ''); + await BootstrapUtils.loadYaml('test/encrypted.yml', ''); expect(1).eq(0); } catch (e) { expect(e.message).eq( @@ -146,7 +148,7 @@ describe('BootstrapUtils', () => { } try { - BootstrapUtils.loadYaml('test/encrypted.yml', undefined); + await BootstrapUtils.loadYaml('test/encrypted.yml', undefined); expect(1).eq(0); } catch (e) { expect(e.message).eq( @@ -154,7 +156,7 @@ describe('BootstrapUtils', () => { ); } - expect(CryptoUtils.encryptedCount(BootstrapUtils.loadYaml('test/encrypted.yml', false))).to.be.eq(6); + expect(CryptoUtils.encryptedCount(await BootstrapUtils.loadYaml('test/encrypted.yml', false))).to.be.eq(6); }); it('mergeTest', async () => { diff --git a/packages/bootstrap-core/test/service/CertificateService.test.ts b/packages/bootstrap-core/test/service/CertificateService.test.ts new file mode 100644 index 000000000..a73e5dd9d --- /dev/null +++ b/packages/bootstrap-core/test/service/CertificateService.test.ts @@ -0,0 +1,106 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { deepStrictEqual } from 'assert'; +import { expect } from 'chai'; +import { promises as fsPromises, readFileSync } from 'fs'; +import 'mocha'; +import { join } from 'path'; +import { Account, NetworkType } from 'symbol-sdk'; +import { LoggerFactory, LogType } from '../../src'; +import { + BootstrapUtils, + CertificateMetadata, + CertificateService, + ConfigLoader, + DefaultAccountResolver, + NodeCertificates, + Preset, +} from '../../src/service'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); +describe('CertificateService', () => { + it('getCertificates from output', async () => { + const outputFile = `./test/certificates/output.txt`; + const output = BootstrapUtils.loadFileAsText(outputFile); + const certificates = CertificateService.getCertificates(output); + deepStrictEqual(certificates, [ + { + privateKey: '7B63F86AF5E33617C349832012F42FAC0102001A705E4842D0F615B1BA1C98A2', + publicKey: 'D22DBD053E6913005DE2E59A3907C88CD6AB081B8BC1AC26EE24BDEB09B8BDA2', + }, + { + privateKey: '6ED4C590110285572FB60F1F2ADF50F2DF96991B0A72E86241B2D44B4CE7E696', + publicKey: '5F4F8760D675F6836D4C07576F88B179BFE4471EDFBA4ECD2399C8F1EF02EE71', + }, + ]); + }); + + it('createCertificates', async () => { + const target = 'target/tests/CertificateService.test'; + await BootstrapUtils.deleteFolder(logger, target); + const service = new CertificateService(logger, { + target: target, + user: await BootstrapUtils.getDockerUserGroup(logger), + accountResolver: new DefaultAccountResolver(), + }); + const presetData = new ConfigLoader(logger).createPresetData({ + preset: Preset.dualCurrency, + password: 'abc', + workingDir: BootstrapUtils.defaultWorkingDir, + }); + const networkType = NetworkType.TEST_NET; + const keys: NodeCertificates = { + main: ConfigLoader.toConfigFromAccount( + Account.createFromPrivateKey('E095162875BB1D98CA5E0941670E01C1B0DBDF86DF7B3BEDA4A93635F8E51A03', networkType), + ), + transport: ConfigLoader.toConfigFromAccount( + Account.createFromPrivateKey('415F253ABF0FB2DFD39D7F409EFA2E88769873CAEB45617313B98657A1476A15', networkType), + ), + }; + + const randomSerial = '4C87E5C49034B711E2DA38D116366829DA144B\n'.toLowerCase(); + await service.run(networkType, presetData.symbolServerImage, 'test-node', keys, target, randomSerial); + + const expectedMetadata: CertificateMetadata = { + version: 1, + transportPublicKey: keys.transport.publicKey, + mainPublicKey: keys.main.publicKey, + }; + expect(expectedMetadata).deep.eq(await BootstrapUtils.loadYaml(join(target, 'metadata.yml'), false)); + + const files = await fsPromises.readdir(target); + expect(files).deep.eq([ + 'ca.cert.pem', + 'ca.cnf', + 'ca.pubkey.pem', + 'metadata.yml', + 'node.cnf', + 'node.crt.pem', + 'node.csr.pem', + 'node.full.crt.pem', + 'node.key.pem', + ]); + + const diffFiles = ['new_certs', 'ca.cert.pem', 'index.txt', 'node.crt.pem', 'node.full.crt.pem']; + + // Filtering out files that aren't the same + files + .filter((f) => diffFiles.indexOf(f) === -1) + .forEach((f) => { + expect(readFileSync(join(target, f)), `Different fields: ${f}`).deep.eq(readFileSync(join('test', 'nodeCertificates', f))); + }); + }); +}); diff --git a/packages/bootstrap-core/test/service/ComposeService.test.ts b/packages/bootstrap-core/test/service/ComposeService.test.ts new file mode 100644 index 000000000..ee797ce94 --- /dev/null +++ b/packages/bootstrap-core/test/service/ComposeService.test.ts @@ -0,0 +1,32 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { expect } from 'chai'; +import 'mocha'; +import { LoggerFactory, LogType } from '../../src'; +import { ComposeService } from '../../src/service'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); +describe('ComposeService', () => { + it('resolveDebugOptions', async () => { + const service = new ComposeService(logger, ComposeService.defaultParams); + expect(service.resolveDebugOptions(true, true)).deep.equals(ComposeService.DEBUG_SERVICE_PARAMS); + expect(service.resolveDebugOptions(true, undefined)).deep.equals(ComposeService.DEBUG_SERVICE_PARAMS); + expect(service.resolveDebugOptions(true, false)).deep.equals({}); + expect(service.resolveDebugOptions(false, true)).deep.equals(ComposeService.DEBUG_SERVICE_PARAMS); + expect(service.resolveDebugOptions(false, undefined)).deep.equals({}); + expect(service.resolveDebugOptions(false, false)).deep.equals({}); + }); +}); diff --git a/packages/bootstrap-core/test/service/ConfigLoader.test.ts b/packages/bootstrap-core/test/service/ConfigLoader.test.ts new file mode 100644 index 000000000..82da11e83 --- /dev/null +++ b/packages/bootstrap-core/test/service/ConfigLoader.test.ts @@ -0,0 +1,734 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { expect } from 'chai'; +import 'mocha'; +import { Account, NetworkType } from 'symbol-sdk'; +import { LoggerFactory, LogType } from '../../src/logger'; +import { Addresses, PrivateKeySecurityMode } from '../../src/model'; +import { BootstrapUtils, ConfigLoader, DefaultAccountResolver, KeyName, Preset } from '../../src/service'; + +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); + +const accountResolver = new DefaultAccountResolver(); +accountResolver.generateNewAccount = (networkType) => Account.createFromPrivateKey('a'.repeat(64), networkType); +const nodeName = 'node'; + +describe('ConfigLoader', () => { + it('ConfigLoader loadPresetData testnet assembly', async () => { + const configLoader = new ConfigLoader(logger); + const presetData = await configLoader.createPresetData({ + preset: Preset.testnet, + assembly: 'dual', + customPreset: undefined, + customPresetObject: undefined, + password: 'abc', + workingDir: BootstrapUtils.defaultWorkingDir, + }); + expect(presetData).to.not.be.undefined; + }); + + it('ConfigLoader supernode custom maxUnlockedAccounts', async () => { + const configLoader = new ConfigLoader(logger); + const originalPresetData = await configLoader.createPresetData({ + preset: Preset.testnet, + assembly: 'dual', + customPreset: 'test/unit-test-profiles/supernode.yml', + customPresetObject: { + maxUnlockedAccounts: 30, + }, + password: 'abcd', + workingDir: BootstrapUtils.defaultWorkingDir, + }); + expect(originalPresetData).to.not.be.undefined; + expect(originalPresetData.nodes![0].maxUnlockedAccounts).eq(undefined); + expect(originalPresetData.maxUnlockedAccounts).eq(30); + expect(originalPresetData.customPresetCache).deep.eq({ + maxUnlockedAccounts: 30, + nodes: [ + { + agentPrivateKey: 'AAAA231C860EB1B6E3A4F8366C8F0F6C7C2462A40263DCB67124FB76CDD4E368', + agentUrl: 'https://fboucquez-agent-symbollocal.ngrok.io', + host: 'fboucquez-agent-symbollocal.ngrok.io', + mainPrivateKey: 'CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD', + remotePrivateKey: 'EFE3F0EF0AB368B8D7AC194D52A8CCFA2D5050B80B9C76E4D2F4D4BF2CD461C1', + restGatewayUrl: 'http://fboucquez-rest-gateway-symbollocal.ngrok.io', + rewardProgram: 'supernode', + transportPrivateKey: '6154154096354BC3DB522174ACD8BFE553893A0991BD5D105599846F17A3383B', + voting: true, + vrfPrivateKey: 'F3C24C153783B683E40FB2671493B54480370BF4E3AB8027D4BF1293E14EB9B8', + }, + ], + privateKeySecurityMode: 'PROMPT_MAIN', + }); + + const upgradedPresetData = await configLoader.createPresetData({ + oldPresetData: originalPresetData, + preset: Preset.testnet, + assembly: 'dual', + password: 'abcd', + workingDir: BootstrapUtils.defaultWorkingDir, + }); + expect(upgradedPresetData).to.not.be.undefined; + expect(upgradedPresetData.nodes![0].maxUnlockedAccounts).eq(undefined); + expect(upgradedPresetData.maxUnlockedAccounts).eq(30); + expect(upgradedPresetData.customPresetCache).deep.eq({ + maxUnlockedAccounts: 30, + nodes: [ + { + agentPrivateKey: 'AAAA231C860EB1B6E3A4F8366C8F0F6C7C2462A40263DCB67124FB76CDD4E368', + agentUrl: 'https://fboucquez-agent-symbollocal.ngrok.io', + host: 'fboucquez-agent-symbollocal.ngrok.io', + mainPrivateKey: 'CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD', + remotePrivateKey: 'EFE3F0EF0AB368B8D7AC194D52A8CCFA2D5050B80B9C76E4D2F4D4BF2CD461C1', + restGatewayUrl: 'http://fboucquez-rest-gateway-symbollocal.ngrok.io', + rewardProgram: 'supernode', + transportPrivateKey: '6154154096354BC3DB522174ACD8BFE553893A0991BD5D105599846F17A3383B', + voting: true, + vrfPrivateKey: 'F3C24C153783B683E40FB2671493B54480370BF4E3AB8027D4BF1293E14EB9B8', + }, + ], + privateKeySecurityMode: 'PROMPT_MAIN', + }); + + const upgradedPresetResetToDefaults = await configLoader.createPresetData({ + oldPresetData: originalPresetData, + + preset: Preset.testnet, + customPresetObject: { + maxUnlockedAccounts: 15, + }, + assembly: 'dual', + password: 'abcd', + workingDir: BootstrapUtils.defaultWorkingDir, + }); + expect(upgradedPresetResetToDefaults).to.not.be.undefined; + expect(upgradedPresetResetToDefaults.nodes![0].maxUnlockedAccounts).eq(undefined); + expect(upgradedPresetResetToDefaults.maxUnlockedAccounts).eq(15); + expect(upgradedPresetResetToDefaults.customPresetCache).deep.eq({ + maxUnlockedAccounts: 15, + }); + }); + + it('mergePreset', async () => { + const configLoader = new ConfigLoader(logger); + expect( + configLoader.mergePresets( + { maxUnlockedAccounts: 1, inflation: { a: 1, c: 1, d: 1 } }, + { maxUnlockedAccounts: 2 }, + { maxUnlockedAccounts: 3, inflation: { c: 2, d: 2, e: 2 } }, + { maxUnlockedAccounts: 4 }, + ), + ).deep.eq({ maxUnlockedAccounts: 4, inflation: { c: 2, d: 2, e: 2 } }); + }); + + it('mergePreset with node', async () => { + const configLoader = new ConfigLoader(logger); + const merged = configLoader.mergePresets( + { + maxUnlockedAccounts: 1, + inflation: { a: 1, c: 1, d: 1 }, + }, + { nodes: [{ maxUnlockedAccounts: 5, name: 'name1' }], knownRestGateways: ['r1', 'r2'] }, + { maxUnlockedAccounts: 3, inflation: { c: 2, d: 2, e: 2 }, knownRestGateways: ['r2', 'r3'] }, + { + maxUnlockedAccounts: 4, + nodes: [{ maxUnlockedAccounts: 3 }, { maxUnlockedAccounts: 4, name: 'nameB' }], + }, + ); + console.log(JSON.stringify(merged)); + expect(merged).deep.eq({ + maxUnlockedAccounts: 4, + inflation: { c: 2, d: 2, e: 2 }, + nodes: [ + { maxUnlockedAccounts: 3, name: 'name1' }, + { maxUnlockedAccounts: 4, name: 'nameB' }, + ], + knownRestGateways: ['r2', 'r3'], + }); + }); + + it('ConfigLoader loadPresetData bootstrap custom', async () => { + const configLoader = new ConfigLoader(logger); + const presetData = await configLoader.createPresetData({ + preset: Preset.dualCurrency, + assembly: undefined, + customPreset: 'test/override-currency-preset.yml', + customPresetObject: undefined, + password: 'abcd', + workingDir: BootstrapUtils.defaultWorkingDir, + }); + expect(presetData).to.not.be.undefined; + expect(presetData?.nemesis?.mosaics?.[0].accounts).to.be.eq(20); + const yaml = BootstrapUtils.toYaml(presetData); + expect(BootstrapUtils.fromYaml(yaml)).to.be.deep.eq(presetData); + }); + + it('ConfigLoader loadPresetData bootstrap custom too short!', async () => { + const configLoader = new ConfigLoader(logger); + try { + await configLoader.createPresetData({ + preset: Preset.dualCurrency, + assembly: undefined, + customPreset: 'test/override-currency-preset.yml', + customPresetObject: undefined, + password: 'abc', + workingDir: BootstrapUtils.defaultWorkingDir, + }); + } catch (e) { + expect(e.message).eq('Password is too short. It should have at least 4 characters!'); + } + }); + + it('applyIndex', async () => { + const configLoader = new ConfigLoader(logger); + const context = { $index: 10 }; + expect(configLoader.applyValueTemplate(context, 'hello')).to.be.eq('hello'); + expect(configLoader.applyValueTemplate(context, 'index')).to.be.eq('index'); + expect(configLoader.applyValueTemplate(context, '$index')).to.be.eq('$index'); + expect(configLoader.applyValueTemplate(context, '{{index}}')).to.be.eq(''); + expect(configLoader.applyValueTemplate(context, '{{$index}}')).to.be.eq('10'); + expect(configLoader.applyValueTemplate(context, '{{add $index 2}}')).to.be.eq('12'); + expect(configLoader.applyValueTemplate(context, '100.100.{{add $index 2}}')).to.be.eq('100.100.12'); + expect(configLoader.applyValueTemplate(context, '100.100.{{add $index 5}}')).to.be.eq('100.100.15'); + }); + + it('expandServicesRepeat when repeat 3', async () => { + const configLoader = new ConfigLoader(logger); + const services = [ + { + repeat: 3, + apiNodeName: 'api-node-{{$index}}', + apiNodeHost: 'api-node-{{$index}}', + apiNodeBrokerHost: 'api-node-broker-{{$index}}', + name: 'rest-gateway-{{$index}}', + description: 'catapult development network', + databaseHost: 'db-{{$index}}', + openPort: true, + ipv4_address: '172.20.0.{{add $index 5}}', + }, + ]; + + const expandedServices = configLoader.expandServicesRepeat({}, services); + + const expectedExpandedServices = [ + { + apiNodeName: 'api-node-0', + apiNodeHost: 'api-node-0', + apiNodeBrokerHost: 'api-node-broker-0', + name: 'rest-gateway-0', + description: 'catapult development network', + databaseHost: 'db-0', + openPort: true, + ipv4_address: '172.20.0.5', + }, + { + apiNodeName: 'api-node-1', + apiNodeHost: 'api-node-1', + apiNodeBrokerHost: 'api-node-broker-1', + name: 'rest-gateway-1', + description: 'catapult development network', + databaseHost: 'db-1', + openPort: true, + ipv4_address: '172.20.0.6', + }, + { + apiNodeName: 'api-node-2', + apiNodeHost: 'api-node-2', + apiNodeBrokerHost: 'api-node-broker-2', + name: 'rest-gateway-2', + description: 'catapult development network', + databaseHost: 'db-2', + openPort: true, + ipv4_address: '172.20.0.7', + }, + ]; + expect(expandedServices).to.be.deep.eq(expectedExpandedServices); + }); + + it('expandServicesRepeat when repeat 0', async () => { + const configLoader = new ConfigLoader(logger); + const services = [ + { + repeat: 0, + apiNodeName: 'api-node-{{$index}}', + apiNodeHost: 'api-node-{{$index}}', + apiNodeBrokerHost: 'api-node-broker-{{$index}}', + name: 'rest-gateway-{{$index}}', + description: 'catapult development network', + databaseHost: 'db-{{$index}}', + openPort: true, + ipv4_address: '172.20.0.{{add $index 5}}', + }, + ]; + + const expandedServices = configLoader.expandServicesRepeat({}, services); + + expect(expandedServices).to.be.deep.eq([]); + }); + + it('expandServicesRepeat when no repeat', async () => { + const configLoader = new ConfigLoader(logger); + const services = [ + { + apiNodeName: 'api-node-{{$index}}', + apiNodeHost: 'api-node-{{$index}}', + apiNodeBrokerHost: 'api-node-broker-{{$index}}', + name: 'rest-gateway-{{$index}}', + description: 'catapult development network', + databaseHost: 'db-{{$index}}', + openPort: true, + ipv4_address: '172.20.0.{{add $index 5}}', + }, + ]; + + const expandedServices = configLoader.expandServicesRepeat({}, services); + + const expectedExpandedServices = [ + { + apiNodeBrokerHost: 'api-node-broker-0', + apiNodeHost: 'api-node-0', + apiNodeName: 'api-node-0', + databaseHost: 'db-0', + description: 'catapult development network', + ipv4_address: '172.20.0.5', + name: 'rest-gateway-0', + openPort: true, + }, + ]; + expect(expandedServices).to.be.deep.eq(expectedExpandedServices); + }); + + it('applyValueTemplate when object', async () => { + const configLoader = new ConfigLoader(logger); + const value = { + _info: 'this file contains a list of api-node peers', + knownPeers: [ + { + publicKey: '46902d4a6136d43f8d78e3ab4494aee9b1da17886f6f0a698959714f96900bd6', + endpoint: { + host: 'api-node-0', + port: 7900, + }, + metadata: { + name: 'api-node-0', + roles: 'Api', + }, + }, + ], + }; + + expect(configLoader.applyValueTemplate({}, value)).to.be.deep.eq(value); + expect(configLoader.applyValueTemplate({}, BootstrapUtils.fromYaml(BootstrapUtils.toYaml(value)))).to.be.deep.eq(value); + }); + + it('applyValueTemplate when array', async () => { + const configLoader = new ConfigLoader(logger); + const value = [ + { + _info: 'this file contains a list of api-node peers', + knownPeers: [ + { + publicKey: '46902d4a6136d43f8d78e3ab4494aee9b1da17886f6f0a698959714f96900bd6', + endpoint: { + host: 'api-node-0', + port: 7900, + }, + metadata: { + name: 'api-node-0', + roles: 'Api', + }, + }, + ], + }, + ]; + + expect(configLoader.applyValueTemplate({}, value)).to.be.deep.eq(value); + expect(configLoader.applyValueTemplate({}, BootstrapUtils.fromYaml(BootstrapUtils.toYaml(value)))).to.be.deep.eq(value); + }); + + it('should migrated old addresses', async () => { + const configLoader = new ConfigLoader(logger); + const oldAddresses = (await BootstrapUtils.loadYaml('./test/addresses/addresses-old.yml', false)) as Addresses; + const newAddresses = (await BootstrapUtils.loadYaml('./test/addresses/addresses-new.yml', false)) as Addresses; + const addresses = configLoader.migrateAddresses(oldAddresses, NetworkType.TEST_NET); + newAddresses.nodes![1].transport = addresses.nodes![1]!.transport; + expect(addresses).to.be.deep.eq(newAddresses); + }); + + it('should migrated not migrate new addresses', async () => { + const configLoader = new ConfigLoader(logger); + const newAddresses = BootstrapUtils.loadYaml('./test/addresses/addresses-new.yml', false) as Addresses; + const addresses = configLoader.migrateAddresses(newAddresses, NetworkType.TEST_NET) as Addresses; + expect(addresses).to.be.deep.eq(newAddresses); + }); + + it('should generateAccount when old and new are different', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.ENCRYPT; + const oldAccount = Account.generateNewAccount(networkType); + const newAccount = Account.generateNewAccount(networkType); + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Main, + nodeName, + { + publicKey: oldAccount.publicKey, + address: oldAccount.address.plain(), + privateKey: oldAccount.privateKey, + }, + { + privateKey: newAccount.privateKey, + address: newAccount.address.plain(), + publicKey: newAccount.publicKey, + }, + ); + expect(account).deep.eq({ + publicKey: newAccount.publicKey, + address: newAccount.address.plain(), + privateKey: newAccount.privateKey, + }); + }); + + it('should generateAccount when old and new are different', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.ENCRYPT; + const oldAccount = Account.generateNewAccount(networkType); + const newAccount = Account.generateNewAccount(networkType); + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Main, + nodeName, + { + publicKey: oldAccount.publicKey, + address: oldAccount.address.plain(), + privateKey: oldAccount.privateKey, + }, + { + privateKey: newAccount.privateKey, + address: newAccount.address.plain(), + publicKey: newAccount.publicKey, + }, + ); + expect(account).deep.eq({ + publicKey: newAccount.publicKey, + address: newAccount.address.plain(), + privateKey: newAccount.privateKey, + }); + }); + + it('should generateAccount when old and new are same', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.ENCRYPT; + const oldAccount = Account.generateNewAccount(networkType); + const newAccount = oldAccount; + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Main, + nodeName, + { + publicKey: oldAccount.publicKey, + address: oldAccount.address.plain(), + privateKey: oldAccount.privateKey, + }, + { + privateKey: newAccount.privateKey, + address: newAccount.address.plain(), + publicKey: newAccount.publicKey, + }, + ); + expect(account).deep.eq({ + publicKey: newAccount.publicKey, + address: newAccount.address.plain(), + privateKey: newAccount.privateKey, + }); + }); + + it('should generateAccount when old and new are same, new no private eky', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.ENCRYPT; + const oldAccount = Account.generateNewAccount(networkType); + const newAccount = oldAccount; + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Main, + nodeName, + { + publicKey: oldAccount.publicKey, + address: oldAccount.address.plain(), + privateKey: oldAccount.privateKey, + }, + { + address: newAccount.address.plain(), + publicKey: newAccount.publicKey, + }, + ); + expect(account).deep.eq({ + publicKey: newAccount.publicKey, + address: newAccount.address.plain(), + privateKey: newAccount.privateKey, + }); + }); + + it('should generateAccount when old and new are same, old no private key', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.ENCRYPT; + const oldAccount = Account.generateNewAccount(networkType); + const newAccount = oldAccount; + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Main, + nodeName, + { + publicKey: oldAccount.publicKey, + address: oldAccount.address.plain(), + }, + { + privateKey: newAccount.privateKey, + address: newAccount.address.plain(), + publicKey: newAccount.publicKey, + }, + ); + expect(account).deep.eq({ + publicKey: newAccount.publicKey, + address: newAccount.address.plain(), + privateKey: newAccount.privateKey, + }); + }); + + it('should generateAccount when old and new are same, old private key', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.ENCRYPT; + const oldAccount = Account.generateNewAccount(networkType); + const newAccount = oldAccount; + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Main, + nodeName, + { + publicKey: oldAccount.publicKey, + address: oldAccount.address.plain(), + }, + { + publicKey: newAccount.publicKey, + address: newAccount.address.plain(), + }, + ); + expect(account).deep.eq({ + publicKey: newAccount.publicKey, + address: newAccount.address.plain(), + }); + }); + + it('should generateAccount when old and new are different, no private key new', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.ENCRYPT; + const oldAccount = Account.generateNewAccount(networkType); + const newAccount = Account.generateNewAccount(networkType); + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Main, + nodeName, + { + publicKey: oldAccount.publicKey, + address: oldAccount.address.plain(), + privateKey: oldAccount.privateKey, + }, + { + publicKey: newAccount.publicKey, + address: newAccount.address.plain(), + }, + ); + expect(account).deep.eq({ + publicKey: newAccount.publicKey, + address: newAccount.address.plain(), + }); + }); + + it('should generateAccount when old and new are different. No new account', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.ENCRYPT; + const oldAccount = Account.generateNewAccount(networkType); + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Main, + nodeName, + { + publicKey: oldAccount.publicKey, + address: oldAccount.address.plain(), + privateKey: oldAccount.privateKey, + }, + undefined, + ); + expect(account).deep.eq({ + publicKey: oldAccount.publicKey, + address: oldAccount.address.plain(), + privateKey: oldAccount.privateKey, + }); + }); + + it('should generateAccount when old and new are different. No new account. Old without private', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.ENCRYPT; + const oldAccount = Account.generateNewAccount(networkType); + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Main, + nodeName, + { + publicKey: oldAccount.publicKey, + address: oldAccount.address.plain(), + }, + undefined, + ); + expect(account).deep.eq({ + publicKey: oldAccount.publicKey, + address: oldAccount.address.plain(), + }); + }); + + it('should generateAccount brand new', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.ENCRYPT; + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Main, + nodeName, + undefined, + undefined, + ); + expect(account.address).not.undefined; + expect(account.privateKey).not.undefined; + expect(account.privateKey).not.undefined; + }); + + it('should generateAccount brand new on remote', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT; + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Remote, + nodeName, + undefined, + undefined, + ); + expect(account.address).not.undefined; + expect(account.privateKey).not.undefined; + expect(account.privateKey).not.undefined; + }); + + it('should generateAccount brand new on voting', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.PROMPT_MAIN; + const account = await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Voting, + nodeName, + undefined, + undefined, + ); + expect(account.address).not.undefined; + expect(account.privateKey).not.undefined; + expect(account.privateKey).not.undefined; + }); + + it('should generateAccount raise error new', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.PROMPT_MAIN; + + try { + await configLoader.generateAccount(accountResolver, networkType, securityMode, KeyName.Main, nodeName, undefined, undefined); + expect(false).eq(true); + } catch (e) { + expect(e.message).eq( + "Account Main cannot be generated when Private Key Security Mode is PROMPT_MAIN. Account won't be stored anywhere!. Please use ENCRYPT, or provider your Main account with custom presets!", + ); + } + }); + + it('should generateAccount raise error new', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT; + expect( + async () => + await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Transport, + nodeName, + undefined, + undefined, + ), + ).throw; + }); + + it('should generateAccount raise error new', async () => { + const configLoader = new ConfigLoader(logger); + const networkType = NetworkType.MIJIN_TEST; + const securityMode = PrivateKeySecurityMode.PROMPT_ALL; + expect( + async () => + await configLoader.generateAccount( + accountResolver, + networkType, + securityMode, + KeyName.Remote, + nodeName, + undefined, + undefined, + ), + ).throw; + }); +}); diff --git a/packages/bootstrap-core/test/service/ConfigService.test.ts b/packages/bootstrap-core/test/service/ConfigService.test.ts new file mode 100644 index 000000000..3022c18a5 --- /dev/null +++ b/packages/bootstrap-core/test/service/ConfigService.test.ts @@ -0,0 +1,341 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { expect } from 'chai'; +import 'mocha'; +import { LoggerFactory, LogType } from '../../src'; +import { Assembly, ConfigService, CryptoUtils, Preset } from '../../src/service'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); +describe('ConfigService', () => { + it('ConfigService bootstrap run with custom_preset.yml', async () => { + await new ConfigService(logger, { + ...ConfigService.defaultParams, + reset: true, + offline: true, + preset: Preset.dualCurrency, + target: 'target/tests/ConfigService.test.optin', + customPreset: './test/custom_preset.yml', + }).run(); + }); + + it('ConfigService bootstrap in custom preset run with override-currency-preset.yml', async () => { + await new ConfigService(logger, { + ...ConfigService.defaultParams, + reset: true, + offline: true, + target: 'target/tests/ConfigService.test.custom', + customPreset: './test/override-currency-preset.yml', + }).run(); + }); + + it('ConfigService testnet assembly', async () => { + await new ConfigService(logger, { + ...ConfigService.defaultParams, + reset: true, + offline: true, + target: 'target/tests/ConfigService.test.testnet', + preset: Preset.testnet, + assembly: 'dual', + }).run(); + }); + + it('ConfigService mainnet assembly', async () => { + await new ConfigService(logger, { + ...ConfigService.defaultParams, + reset: true, + offline: true, + target: 'target/tests/ConfigService.test.mainnet', + preset: Preset.mainnet, + assembly: 'dual', + }).run(); + }); + + it('ConfigService bootstrap default', async () => { + const configResult = await new ConfigService(logger, { + ...ConfigService.defaultParams, + reset: true, + offline: true, + password: '1111', + target: 'target/tests/bootstrap', + preset: Preset.dualCurrency, + }).run(); + + expect(configResult.addresses.mosaics?.length).eq(2); + expect(configResult.addresses.mosaics?.[0]?.accounts.length).eq(5); + expect(configResult.addresses.mosaics?.[1]?.accounts.length).eq(2); + + const configResultUpgrade = await new ConfigService(logger, { + ...ConfigService.defaultParams, + upgrade: true, + offline: true, + password: '1111', + target: 'target/tests/bootstrap', + preset: Preset.dualCurrency, + }).run(); + expect(configResult.addresses).deep.eq(configResultUpgrade.addresses); + + expect(CryptoUtils.removePrivateKeys(configResultUpgrade.presetData)).deep.eq( + CryptoUtils.removePrivateKeys(configResult.presetData), + ); + }); + + it('ConfigService bootstrap repeat', async () => { + const configResult = await new ConfigService(logger, { + ...ConfigService.defaultParams, + reset: true, + offline: true, + target: 'target/tests/ConfigService.bootstrap.repeat', + preset: Preset.dualCurrency, + assembly: Assembly.multinode, + customPreset: './test/repeat_preset.yml', + }).run(); + + const assertRepeatedService = (expectedCount: number, services: any[] | undefined) => { + expect(services!.length).to.be.eq(expectedCount); + + services?.forEach((service) => { + Object.values(service).forEach((value) => { + expect((value + '').indexOf('index'), `'${value}' contains index!`).to.be.eq(-1); + }); + }); + }; + + assertRepeatedService(4, configResult.presetData.databases); + assertRepeatedService(7, configResult.presetData.nodes); + assertRepeatedService(4, configResult.presetData.gateways); + assertRepeatedService(4, configResult.presetData.databases); + }); + + it('ConfigService mainnet supernode assembly after upgrade', async () => { + const configResultInitial = await new ConfigService(logger, { + ...ConfigService.defaultParams, + reset: true, + offline: true, + target: 'target/tests/ConfigService.mainnet.supernode', + preset: Preset.mainnet, + customPreset: 'test/unit-test-profiles/supernode.yml', + assembly: 'dual', + }).run(); + const configResultUpgrade = await new ConfigService(logger, { + ...ConfigService.defaultParams, + upgrade: true, + offline: true, + target: 'target/tests/ConfigService.mainnet.supernode', + preset: Preset.mainnet, + assembly: 'dual', + }).run(); + expect(CryptoUtils.removePrivateKeys(configResultUpgrade.presetData)).deep.eq( + CryptoUtils.removePrivateKeys(configResultInitial.presetData), + ); + const configResultUpgradeSecond = await new ConfigService(logger, { + ...ConfigService.defaultParams, + upgrade: true, + target: 'target/tests/ConfigService.mainnet.supernode', + }).run(); + + expect(CryptoUtils.removePrivateKeys(configResultUpgradeSecond.presetData)).deep.eq( + CryptoUtils.removePrivateKeys(configResultInitial.presetData), + ); + }); + + it('ConfigService testnet supernode assembly after upgrade', async () => { + const configResultInitial = await new ConfigService(logger, { + ...ConfigService.defaultParams, + reset: true, + target: 'target/tests/ConfigService.testnet.supernode', + preset: Preset.testnet, + offline: true, + customPreset: 'test/unit-test-profiles/supernode.yml', + assembly: 'dual', + }).run(); + const configResultUpgrade = await new ConfigService(logger, { + ...ConfigService.defaultParams, + upgrade: true, + offline: true, + target: 'target/tests/ConfigService.testnet.supernode', + preset: Preset.testnet, + assembly: 'dual', + }).run(); + expect(CryptoUtils.removePrivateKeys(configResultUpgrade.presetData)).deep.eq( + CryptoUtils.removePrivateKeys(configResultInitial.presetData), + ); + const configResultUpgradeSecond = await new ConfigService(logger, { + ...ConfigService.defaultParams, + upgrade: true, + target: 'target/tests/ConfigService.testnet.supernode', + }).run(); + + expect(CryptoUtils.removePrivateKeys(configResultUpgradeSecond.presetData)).deep.eq( + CryptoUtils.removePrivateKeys(configResultInitial.presetData), + ); + }); + it('singleCurrency custom distribution', async () => { + const configResultInitial = await new ConfigService(logger, { + ...ConfigService.defaultParams, + reset: true, + target: 'target/tests/ConfigService.singleCurrency-custom-distribution', + preset: Preset.singleCurrency, + assembly: Assembly.multinode, + offline: true, + customPresetObject: { + nemesis: { + nemesisSignerPrivateKey: '935C58E9D933D9A4E3BE6EEB5DA7B518FF90DA6B32BA6BEDE1098B79E2B69B66', + mosaics: [ + { + accounts: 20, + currencyDistributions: [ + { + address: 'TACBGHDQEJOAOAIR4KGWWAOZRGGSR4BPR6JRCPI', + amount: 1, + }, + { + address: 'TBJEKGLTINMGFEH6O47E7ZXMZFWZAJHBJTHOVUY', + amount: 2, + }, + { + address: 'TAFVG5SVH3PVPK7A53P33GADIDHZBRYESR4BHOA', + amount: 3, + }, + { + address: 'TB7CMTCZBRMWTGDFBU6D5Q6OSTFEIS47QI6NX6Q', + amount: 4, + }, + { + address: 'TCDXRIOF2TNZDGMKZJNEVYY2OJVS7V5AKXXADFI', + amount: 5, + }, + { + address: 'TCHX23ENEKTSUGI7MMXFFALNF57C6WXBL7VXM7I', + amount: 6, + }, + { + address: 'TCCGI34RLMGW5HTEB3YLKK3BAYVV3XPEBCB6EBI', + amount: 7, + }, + { + address: 'TBKXWLGKQSCLNSVHQWTI2V3C6SMJMGFBEZOQY5Y', + amount: 8, + }, + ], + }, + ], + }, + }, + }).run(); + expect(configResultInitial.presetData.nemesis?.mosaics?.length).to.be.eq(1); + expect(configResultInitial.presetData.nemesis?.mosaics?.[0].currencyDistributions.length).to.be.eq(31); + + expect(configResultInitial.addresses.mosaics?.[0].id).eq('113DFC906359F64D'); + expect(configResultInitial.addresses.mosaics?.[0].name).eq('currency'); + + const currencyMosaicBalances = configResultInitial.presetData.nemesis?.mosaics?.[0].currencyDistributions.map((m) => m.amount); + expect(currencyMosaicBalances).to.be.deep.eq([ + 1415043477913043, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, + 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, + 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 50000000000000, + 50000000000000, 50000000000000, 1, 2, 3, 4, 5, 6, 7, 8, + ]); + }); + it('Bootstrap custom distribution', async () => { + const configResultInitial = await new ConfigService(logger, { + ...ConfigService.defaultParams, + reset: true, + target: 'target/tests/ConfigService.bootstrap-custom-distribution', + preset: Preset.dualCurrency, + offline: true, + assembly: Assembly.multinode, + customPreset: 'test/unit-test-profiles/bootstrap-custom-distribution.yml', + }).run(); + expect(configResultInitial.presetData.nemesis?.mosaics?.length).to.be.eq(2); + expect(configResultInitial.presetData.nemesis?.mosaics?.[0].currencyDistributions.length).to.be.eq(31); + expect(configResultInitial.presetData.nemesis?.mosaics?.[1].currencyDistributions.length).to.be.eq(18); + + expect(configResultInitial.addresses.mosaics?.[0].id).eq('113DFC906359F64D'); + expect(configResultInitial.addresses.mosaics?.[0].name).eq('currency'); + + expect(configResultInitial.addresses.mosaics?.[1].id).eq('0B2720BC49498DAC'); + expect(configResultInitial.addresses.mosaics?.[1].name).eq('harvest'); + + const currencyMosaicBalances = configResultInitial.presetData.nemesis?.mosaics?.[0].currencyDistributions.map((m) => m.amount); + expect(currencyMosaicBalances).to.be.deep.eq([ + 391260869478266, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, + 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, + 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, 391260869478259, + 391260869478259, 391260869478259, 1, 2, 3, 4, 5, 6, 7, 8, + ]); + const harvestMosaicBalances = configResultInitial.presetData.nemesis?.mosaics?.[1].currencyDistributions.map((m) => m.amount); + expect(harvestMosaicBalances).to.be.deep.eq([ + 1153845, 1153845, 1153845, 1153845, 1153845, 1153845, 1153845, 1153845, 1153845, 1153845, 1153845, 1153845, 1153845, 1, 2, 3, 4, + 5, + ]); + }); + it('Bootstrap custom distribution with custom maxHarvesterBalance', async () => { + const configResultInitial = await new ConfigService(logger, { + ...ConfigService.defaultParams, + reset: true, + offline: true, + target: 'target/tests/ConfigService.bootstrap-custom-distribution-with-balances', + preset: Preset.dualCurrency, + assembly: Assembly.multinode, + customPresetObject: { + maxHarvesterBalance: 13000, + nemesis: { + nemesisSignerPrivateKey: '935C58E9D933D9A4E3BE6EEB5DA7B518FF90DA6B32BA6BEDE1098B79E2B69B66', + mosaics: [ + { + accounts: 3, + currencyDistributions: [ + { + address: 'TACBGHDQEJOAOAIR4KGWWAOZRGGSR4BPR6JRCPI', + amount: 1, + }, + { + address: 'TBJEKGLTINMGFEH6O47E7ZXMZFWZAJHBJTHOVUY', + amount: 2, + }, + ], + }, + { + accounts: 2, + currencyDistributions: [ + { + address: 'TACBGHDQEJOAOAIR4KGWWAOZRGGSR4BPR6JRCPI', + amount: 1, + }, + ], + }, + ], + }, + }, + }).run(); + expect(configResultInitial.presetData.nemesis?.mosaics?.length).to.be.eq(2); + expect(configResultInitial.presetData.nemesis?.mosaics?.[0].currencyDistributions.length).to.be.eq(8); + expect(configResultInitial.presetData.nemesis?.mosaics?.[1].currencyDistributions.length).to.be.eq(6); + + expect(configResultInitial.addresses.mosaics?.[0].id).eq('113DFC906359F64D'); + expect(configResultInitial.addresses.mosaics?.[0].name).eq('currency'); + + expect(configResultInitial.addresses.mosaics?.[1].id).eq('0B2720BC49498DAC'); + expect(configResultInitial.addresses.mosaics?.[1].name).eq('harvest'); + + const currencyMosaicBalances = configResultInitial.presetData.nemesis?.mosaics?.[0].currencyDistributions.map((m) => m.amount); + expect(currencyMosaicBalances).to.be.deep.eq([ + 1499833333000002, 1499833332999999, 1499833332999999, 1499833332999999, 1499833332999999, 1499833332999999, 1, 2, + ]); + const harvestMosaicBalances = configResultInitial.presetData.nemesis?.mosaics?.[1].currencyDistributions.map((m) => m.amount); + expect(harvestMosaicBalances).to.be.deep.eq([11961000, 2999999, 13000, 13000, 13000, 1]); + }); +}); diff --git a/test/service/CryptoUtils.test.ts b/packages/bootstrap-core/test/service/CryptoUtils.test.ts similarity index 99% rename from test/service/CryptoUtils.test.ts rename to packages/bootstrap-core/test/service/CryptoUtils.test.ts index 2e4e39f04..e6a0aacfd 100644 --- a/test/service/CryptoUtils.test.ts +++ b/packages/bootstrap-core/test/service/CryptoUtils.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { expect } from '@oclif/test'; +import { expect } from 'chai'; import 'mocha'; import { PrivateKeySecurityMode } from '../../src/model'; import { BootstrapUtils } from '../../src/service'; diff --git a/test/service/LinkTransactionGenericFactory.test.ts b/packages/bootstrap-core/test/service/LinkTransactionGenericFactory.test.ts similarity index 97% rename from test/service/LinkTransactionGenericFactory.test.ts rename to packages/bootstrap-core/test/service/LinkTransactionGenericFactory.test.ts index 88501e841..735f87f3c 100644 --- a/test/service/LinkTransactionGenericFactory.test.ts +++ b/packages/bootstrap-core/test/service/LinkTransactionGenericFactory.test.ts @@ -14,10 +14,12 @@ * limitations under the License. */ -import { expect } from '@oclif/test'; +import { expect } from 'chai'; import { it } from 'mocha'; import { LinkAction } from 'symbol-sdk'; -import { GenericNodeAccount, KeyAccount, LinkTransactionGenericFactory, VotingKeyAccount } from '../../src/service'; +import { GenericNodeAccount, KeyAccount, LinkTransactionGenericFactory, LoggerFactory, LogType, VotingKeyAccount } from '../../src'; + +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); type GenericTransaction = | { name: string; action: LinkAction; publicKey: string } @@ -67,10 +69,7 @@ describe('LinkTransactionGenericFactory', () => { it('creates generic transactions when empty', async () => { const currentLinkedAccounts: GenericNodeAccount = {}; const toLinkNodeAccounts: GenericNodeAccount = {}; - const transactions = await new LinkTransactionGenericFactory({ - unlink: false, - ready: true, - }).createGenericTransactions( + const transactions = await new LinkTransactionGenericFactory(logger, async () => true, false).createGenericTransactions( 'SomeName', currentLinkedAccounts, toLinkNodeAccounts, @@ -89,10 +88,11 @@ describe('LinkTransactionGenericFactory', () => { unlink: boolean, expectedTransactions: GenericTransaction[], ) => { - const transactions: GenericTransaction[] = await new LinkTransactionGenericFactory({ - unlink: unlink, - ready: true, - }).createGenericTransactions( + const transactions: GenericTransaction[] = await new LinkTransactionGenericFactory( + logger, + async () => true, + unlink, + ).createGenericTransactions( 'SomeName', currentLinkedAccounts, toLinkNodeAccounts, diff --git a/packages/bootstrap-core/test/service/NetworkPresetUpgrade.test.ts b/packages/bootstrap-core/test/service/NetworkPresetUpgrade.test.ts new file mode 100644 index 000000000..1f415059e --- /dev/null +++ b/packages/bootstrap-core/test/service/NetworkPresetUpgrade.test.ts @@ -0,0 +1,40 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { it } from 'mocha'; +import { LoggerFactory, LogType } from '../../src'; +import { ConfigPreset } from '../../src/model'; +import { BootstrapUtils, Preset, RemoteNodeService } from '../../src/service'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); +describe('NetworkPresetUpgrade', () => { + const patchNetworkPreset = async (preset: Preset): Promise => { + const root = './'; + const presetLocation = `${root}/presets/${preset}/network.yml`; + const networkPreset = (await BootstrapUtils.loadYaml(presetLocation, false)) as ConfigPreset; + + const epoch = await new RemoteNodeService(logger).getBestFinalizationEpoch(networkPreset.knownRestGateways); + if (!epoch) { + throw new Error('Epoch could not be resolved!!'); + } + networkPreset.lastKnownNetworkEpoch = epoch; + await BootstrapUtils.writeYaml(presetLocation, networkPreset, undefined); + }; + it.skip('should patch testnet lastKnownNetworkEpoch', () => { + return patchNetworkPreset(Preset.testnet); + }); + it.skip('should patch mainnet lastKnownNetworkEpoch', () => { + return patchNetworkPreset(Preset.mainnet); + }); +}); diff --git a/packages/bootstrap-core/test/service/RewardProgramUtils.test.ts b/packages/bootstrap-core/test/service/RewardProgramUtils.test.ts new file mode 100644 index 000000000..01cf1f19c --- /dev/null +++ b/packages/bootstrap-core/test/service/RewardProgramUtils.test.ts @@ -0,0 +1,32 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { expect } from 'chai'; +import { RewardProgram, RewardProgramUtils } from '../../src/service'; + +describe('RewardProgramUtils', () => { + it('getRewardProgram', async () => { + expect(RewardProgramUtils.getRewardProgram('ecosystem')).eq(RewardProgram.Ecosystem); + expect(RewardProgramUtils.getRewardProgram('Ecosystem')).eq(RewardProgram.Ecosystem); + expect(RewardProgramUtils.getRewardProgram('superNODE')).eq(RewardProgram.SuperNode); + expect(RewardProgramUtils.getRewardProgram('earlyAdoption')).eq(RewardProgram.EarlyAdoption); + try { + RewardProgramUtils.getRewardProgram('NA'); + expect(1).eq(0); + } catch (e) { + expect(e.message).eq('NA is not a valid Reward program. Please use one of EarlyAdoption, Ecosystem, SuperNode, MonitorOnly'); + } + }); +}); diff --git a/test/service/RunService.test.ts b/packages/bootstrap-core/test/service/RunService.test.ts similarity index 75% rename from test/service/RunService.test.ts rename to packages/bootstrap-core/test/service/RunService.test.ts index a1b462cd5..f666df30b 100644 --- a/test/service/RunService.test.ts +++ b/packages/bootstrap-core/test/service/RunService.test.ts @@ -18,17 +18,19 @@ import { expect } from 'chai'; import { existsSync } from 'fs'; import 'mocha'; import { join } from 'path'; -import { BootstrapService, BootstrapUtils, Preset, RunService, StartParams } from '../../src/service'; - +import { LoggerFactory, LogType } from '../../src'; +import { BootstrapService, BootstrapUtils, ConfigService, Preset, RunService, StartParams } from '../../src/service'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); describe('RunService', () => { const target = 'target/tests/BootstrapService.standard'; it('healthCheck', async () => { - const bootstrapService = new BootstrapService(); + const bootstrapService = new BootstrapService(logger); const config: StartParams = { + ...ConfigService.defaultParams, report: false, upgrade: false, - preset: Preset.bootstrap, + preset: Preset.dualCurrency, reset: false, target, detached: true, @@ -41,7 +43,7 @@ describe('RunService', () => { await bootstrapService.compose(config); - const service = new RunService({ ...config }); + const service = new RunService(logger, { ...config }); try { await service.healthCheck(500); } catch (e) { @@ -52,11 +54,12 @@ describe('RunService', () => { }); it('resetData', async () => { - const bootstrapService = new BootstrapService(); + const bootstrapService = new BootstrapService(logger); const config: StartParams = { + ...ConfigService.defaultParams, report: false, upgrade: false, - preset: Preset.bootstrap, + preset: Preset.dualCurrency, reset: false, target, detached: true, @@ -70,9 +73,9 @@ describe('RunService', () => { const nodeDataFolder = BootstrapUtils.getTargetNodesFolder(target, false, configResult.presetData.nodes![0].name, 'data'); expect(existsSync(nodeDataFolder)).eq(true); - BootstrapUtils.deleteFolder(nodeDataFolder); + BootstrapUtils.deleteFolder(logger, nodeDataFolder); expect(existsSync(nodeDataFolder)).eq(false); - const service = new RunService({ ...config }); + const service = new RunService(logger, { ...config }); await service.resetData(); expect(existsSync(join(nodeDataFolder, '00000', '00001.dat'))).eq(false); }); diff --git a/test/service/VerifyService.test.ts b/packages/bootstrap-core/test/service/VerifyService.test.ts similarity index 92% rename from test/service/VerifyService.test.ts rename to packages/bootstrap-core/test/service/VerifyService.test.ts index 664dfc4de..27c22a12b 100644 --- a/test/service/VerifyService.test.ts +++ b/packages/bootstrap-core/test/service/VerifyService.test.ts @@ -13,23 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { expect } from '@oclif/test'; +import { expect } from 'chai'; import * as os from 'os'; import * as semver from 'semver'; -import { BootstrapUtils, VerifyService } from '../../src/service'; - +import { LoggerFactory, LogType } from '../../src'; +import { VerifyService } from '../../src/service'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); describe('VerifyService', () => { const currentNodeJsVersion = process.versions.node; it('loadVersion', async () => { - const service = new VerifyService(); + const service = new VerifyService(logger); expect(service.loadVersion('Docker version 19.03.8, build afacb8b7f0')).eq('19.03.8'); expect(service.loadVersion('Docker version 19.0.8, build afacb8b7f0')).eq('19.0.8'); expect(service.loadVersion('Docker version 19 build a')).eq('19.0.0'); }); it('VerifyService verify current installation', async () => { - const service = new VerifyService(); + const service = new VerifyService(logger); const currentDockerVersion = await service.loadVersionFromCommand('docker --version'); const currentDockerComposeVersion = await service.loadVersionFromCommand('docker-compose --version'); expect(semver.valid(currentNodeJsVersion, service.semverOptions)); @@ -70,7 +71,7 @@ describe('VerifyService', () => { docker: '19.4.0', dockerCompose: '1.25.30', }; - const service = new VerifyService(BootstrapUtils.resolveRootFolder(), expectedVersions); + const service = new VerifyService(logger, expectedVersions); const currentDockerVersion = await service.loadVersionFromCommand('docker --version'); const currentDockerComposeVersion = await service.loadVersionFromCommand('docker-compose --version'); expect(semver.valid(currentNodeJsVersion, service.semverOptions)); diff --git a/test/service/VotingUtils.test.ts b/packages/bootstrap-core/test/service/VotingUtils.test.ts similarity index 96% rename from test/service/VotingUtils.test.ts rename to packages/bootstrap-core/test/service/VotingUtils.test.ts index e0aa7423d..88254fe2a 100644 --- a/test/service/VotingUtils.test.ts +++ b/packages/bootstrap-core/test/service/VotingUtils.test.ts @@ -13,23 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { expect } from '@oclif/test'; +import { expect } from 'chai'; import { readFileSync } from 'fs'; import 'mocha'; import { Convert, KeyPair } from 'symbol-sdk'; diff --git a/test/service/script.ts b/packages/bootstrap-core/test/service/script.ts similarity index 98% rename from test/service/script.ts rename to packages/bootstrap-core/test/service/script.ts index be25aad7e..30a78c9df 100644 --- a/test/service/script.ts +++ b/packages/bootstrap-core/test/service/script.ts @@ -124,6 +124,7 @@ const example = async () => { return signedTransaction; }; + // eslint-disable-next-line @typescript-eslint/no-unused-vars const sendUnlink = async () => { const transferTransaction = AccountKeyLinkTransaction.create( deadline, @@ -191,7 +192,7 @@ const example = async () => { const cosignatureTransaction = cosignatory2.signCosignatureTransaction(CosignatureTransaction.create(transaction)); await transactionRepository.announceAggregateBondedCosignature(cosignatureTransaction).toPromise(); - repositoryFactory + await repositoryFactory .createTransactionStatusRepository() .getTransactionStatus(transaction.transactionInfo?.hash || '') .toPromise(); diff --git a/packages/bootstrap-core/test/supernode.yml b/packages/bootstrap-core/test/supernode.yml new file mode 100644 index 000000000..ec785c309 --- /dev/null +++ b/packages/bootstrap-core/test/supernode.yml @@ -0,0 +1,21 @@ +#privateKeySecurityMode: PROMPT_MAIN +nodeUseRemoteAccount: true +logLevel: 'Debug' +#lastKnownNetworkEpoch: 70 +#votingKeyDesiredLifetime: 28 # create short voting key files, 28 is the minimun +#votingKeyDesiredFutureLifetime: 300 # create files for at least 60 epochs in the future, this will create voting key file 2 and file 3 +useExperimentalNativeVotingKeyGeneration: true # Use new native ts generation +symbolServerImage: symbolplatform/symbol-server-private:gcc-voting-key-unlink-rollback-f2633f4a4c +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6-alpha' +maxUnlockedAccounts: 30 +nodes: + - voting: true + rewardProgram: 'supernode' + host: fboucquez-agent-symbollocal.ngrok.io + agentUrl: https://fboucquez-agent-symbollocal.ngrok.io + restGatewayUrl: http://fboucquez-rest-gateway-symbollocal.ngrok.io + mainPrivateKey: E095162875BB1D98CA5E0941670E01C1B0DBDF86DF7B3BEDA4A93635F8E51A03 + transportPrivateKey: 415F253ABF0FB2DFD39D7F409EFA2E88769873CAEB45617313B98657A1476A15 + remotePrivateKey: 24B485712045FEDA5782ECFF1752F63D41C134371BB46AC68EE6DC9183CF5061 + vrfPrivateKey: D34A231C860EB1B6E3A4F8366C8F0F6C7C2462A40263DCB67124FB76CDD4E368 + agentPrivateKey: AAAA231C860EB1B6E3A4F8366C8F0F6C7C2462A40263DCB67124FB76CDD4E368 diff --git a/test/testnet-known-node-keys.yml b/packages/bootstrap-core/test/testnet-known-node-keys.yml similarity index 100% rename from test/testnet-known-node-keys.yml rename to packages/bootstrap-core/test/testnet-known-node-keys.yml diff --git a/test/tsconfig.json b/packages/bootstrap-core/test/tsconfig.json similarity index 100% rename from test/tsconfig.json rename to packages/bootstrap-core/test/tsconfig.json diff --git a/packages/bootstrap-core/test/unit-test-profiles/bootstrap-custom-distribution-with-balances.yml b/packages/bootstrap-core/test/unit-test-profiles/bootstrap-custom-distribution-with-balances.yml new file mode 100644 index 000000000..37ad33659 --- /dev/null +++ b/packages/bootstrap-core/test/unit-test-profiles/bootstrap-custom-distribution-with-balances.yml @@ -0,0 +1,36 @@ +nodes: + - balances: [30, 50] +nemesis: + nemesisSignerPrivateKey: 935C58E9D933D9A4E3BE6EEB5DA7B518FF90DA6B32BA6BEDE1098B79E2B69B66 + mosaics: + - accounts: 20 + currencyDistributions: + - address: TACBGHDQEJOAOAIR4KGWWAOZRGGSR4BPR6JRCPI + amount: 1 + - address: TBJEKGLTINMGFEH6O47E7ZXMZFWZAJHBJTHOVUY + amount: 2 + - address: TAFVG5SVH3PVPK7A53P33GADIDHZBRYESR4BHOA + amount: 3 + - address: TB7CMTCZBRMWTGDFBU6D5Q6OSTFEIS47QI6NX6Q + amount: 4 + - address: TCDXRIOF2TNZDGMKZJNEVYY2OJVS7V5AKXXADFI + amount: 5 + - address: TCHX23ENEKTSUGI7MMXFFALNF57C6WXBL7VXM7I + amount: 6 + - address: TCCGI34RLMGW5HTEB3YLKK3BAYVV3XPEBCB6EBI + amount: 7 + - address: TBKXWLGKQSCLNSVHQWTI2V3C6SMJMGFBEZOQY5Y + amount: 8 + - name: harvest + accounts: 10 + currencyDistributions: + - address: TDSDCOH77Z27YCQ4NPDNC6MMVHXFGIQ7AV4JQSI + amount: 1 + - address: TDEOPVFMZW4CEY5OHSGTT3DKTU2JLF2HN57K6AY + amount: 2 + - address: TCHX23ENEKTSUGI7MMXFFALNF57C6WXBL7VXM7I + amount: 3 + - address: TCCGI34RLMGW5HTEB3YLKK3BAYVV3XPEBCB6EBI + amount: 4 + - address: TBKXWLGKQSCLNSVHQWTI2V3C6SMJMGFBEZOQY5Y + amount: 5 diff --git a/packages/bootstrap-core/test/unit-test-profiles/bootstrap-custom-distribution.yml b/packages/bootstrap-core/test/unit-test-profiles/bootstrap-custom-distribution.yml new file mode 100644 index 000000000..4aff01a38 --- /dev/null +++ b/packages/bootstrap-core/test/unit-test-profiles/bootstrap-custom-distribution.yml @@ -0,0 +1,34 @@ +nemesis: + nemesisSignerPrivateKey: 935C58E9D933D9A4E3BE6EEB5DA7B518FF90DA6B32BA6BEDE1098B79E2B69B66 + mosaics: + - accounts: 20 + currencyDistributions: + - address: TACBGHDQEJOAOAIR4KGWWAOZRGGSR4BPR6JRCPI + amount: 1 + - address: TBJEKGLTINMGFEH6O47E7ZXMZFWZAJHBJTHOVUY + amount: 2 + - address: TAFVG5SVH3PVPK7A53P33GADIDHZBRYESR4BHOA + amount: 3 + - address: TB7CMTCZBRMWTGDFBU6D5Q6OSTFEIS47QI6NX6Q + amount: 4 + - address: TCDXRIOF2TNZDGMKZJNEVYY2OJVS7V5AKXXADFI + amount: 5 + - address: TCHX23ENEKTSUGI7MMXFFALNF57C6WXBL7VXM7I + amount: 6 + - address: TCCGI34RLMGW5HTEB3YLKK3BAYVV3XPEBCB6EBI + amount: 7 + - address: TBKXWLGKQSCLNSVHQWTI2V3C6SMJMGFBEZOQY5Y + amount: 8 + - name: harvest + accounts: 10 + currencyDistributions: + - address: TDSDCOH77Z27YCQ4NPDNC6MMVHXFGIQ7AV4JQSI + amount: 1 + - address: TDEOPVFMZW4CEY5OHSGTT3DKTU2JLF2HN57K6AY + amount: 2 + - address: TCHX23ENEKTSUGI7MMXFFALNF57C6WXBL7VXM7I + amount: 3 + - address: TCCGI34RLMGW5HTEB3YLKK3BAYVV3XPEBCB6EBI + amount: 4 + - address: TBKXWLGKQSCLNSVHQWTI2V3C6SMJMGFBEZOQY5Y + amount: 5 diff --git a/packages/bootstrap-core/test/unit-test-profiles/custom-network.yml b/packages/bootstrap-core/test/unit-test-profiles/custom-network.yml new file mode 100644 index 000000000..54c21f65a --- /dev/null +++ b/packages/bootstrap-core/test/unit-test-profiles/custom-network.yml @@ -0,0 +1,35 @@ +initialCurrencyAtomicUnits: 880000000000000 +maxMosaicAtomicUnits: 900000000000000 +totalChainImportance: 15000000 +minHarvesterBalance: 500 +maxHarvesterBalance: 50000000000000 +networkType: 152 +minVoterBalance: 50000 +baseNamespace: 'mycat' +networkDescription: 'Ny Company Netowkr' +beneficiaryAddress: '' +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' +nemesis: + mosaics: + - name: 'mycurrency' + divisibility: 6 + duration: 0 + supply: 880000000000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: 2 + - name: 'myharvest' + divisibility: 3 + duration: 0 + supply: 15000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: 2 +inflation: + starting-at-height-1: 0 + starting-at-height-10000: 0 diff --git a/packages/bootstrap-core/test/unit-test-profiles/supernode.yml b/packages/bootstrap-core/test/unit-test-profiles/supernode.yml new file mode 100644 index 000000000..bc0a6f264 --- /dev/null +++ b/packages/bootstrap-core/test/unit-test-profiles/supernode.yml @@ -0,0 +1,13 @@ +privateKeySecurityMode: PROMPT_MAIN +maxUnlockedAccounts: 20 +nodes: + - voting: true + rewardProgram: 'supernode' + host: fboucquez-agent-symbollocal.ngrok.io + agentUrl: https://fboucquez-agent-symbollocal.ngrok.io + restGatewayUrl: http://fboucquez-rest-gateway-symbollocal.ngrok.io + mainPrivateKey: CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD + transportPrivateKey: 6154154096354BC3DB522174ACD8BFE553893A0991BD5D105599846F17A3383B + remotePrivateKey: EFE3F0EF0AB368B8D7AC194D52A8CCFA2D5050B80B9C76E4D2F4D4BF2CD461C1 + vrfPrivateKey: F3C24C153783B683E40FB2671493B54480370BF4E3AB8027D4BF1293E14EB9B8 + agentPrivateKey: AAAA231C860EB1B6E3A4F8366C8F0F6C7C2462A40263DCB67124FB76CDD4E368 diff --git a/test/voting_preset.yml b/packages/bootstrap-core/test/unit-test-profiles/voting_preset.yml similarity index 100% rename from test/voting_preset.yml rename to packages/bootstrap-core/test/unit-test-profiles/voting_preset.yml diff --git a/packages/bootstrap-core/test/voting_preset.yml b/packages/bootstrap-core/test/voting_preset.yml new file mode 100644 index 000000000..d631a1e6e --- /dev/null +++ b/packages/bootstrap-core/test/voting_preset.yml @@ -0,0 +1,5 @@ +databases: + - compose: + mem_limit: ~ +nodes: + - voting: true diff --git a/test/votingkeys/2.test-sign.json b/packages/bootstrap-core/test/votingkeys/2.test-sign.json similarity index 100% rename from test/votingkeys/2.test-sign.json rename to packages/bootstrap-core/test/votingkeys/2.test-sign.json diff --git a/test/votingkeys/private_key_tree1.dat b/packages/bootstrap-core/test/votingkeys/private_key_tree1.dat similarity index 100% rename from test/votingkeys/private_key_tree1.dat rename to packages/bootstrap-core/test/votingkeys/private_key_tree1.dat diff --git a/test/votingkeys/private_key_tree2.dat b/packages/bootstrap-core/test/votingkeys/private_key_tree2.dat similarity index 100% rename from test/votingkeys/private_key_tree2.dat rename to packages/bootstrap-core/test/votingkeys/private_key_tree2.dat diff --git a/test/votingkeys/private_key_tree3.dat b/packages/bootstrap-core/test/votingkeys/private_key_tree3.dat similarity index 100% rename from test/votingkeys/private_key_tree3.dat rename to packages/bootstrap-core/test/votingkeys/private_key_tree3.dat diff --git a/test/votingkeys/private_key_tree4.dat b/packages/bootstrap-core/test/votingkeys/private_key_tree4.dat similarity index 100% rename from test/votingkeys/private_key_tree4.dat rename to packages/bootstrap-core/test/votingkeys/private_key_tree4.dat diff --git a/test/votingkeys/private_key_tree5.dat b/packages/bootstrap-core/test/votingkeys/private_key_tree5.dat similarity index 100% rename from test/votingkeys/private_key_tree5.dat rename to packages/bootstrap-core/test/votingkeys/private_key_tree5.dat diff --git a/packages/bootstrap-core/tsconfig.build.json b/packages/bootstrap-core/tsconfig.build.json new file mode 100644 index 000000000..a74389c9d --- /dev/null +++ b/packages/bootstrap-core/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.build.json", + + "compilerOptions": { + "outDir": "./lib" + }, + + "include": ["src/**/*"] +} diff --git a/packages/bootstrap-core/tsconfig.json b/packages/bootstrap-core/tsconfig.json new file mode 100644 index 000000000..63b5082a6 --- /dev/null +++ b/packages/bootstrap-core/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/network-cli/README.md b/packages/network-cli/README.md new file mode 100644 index 000000000..70c76819f --- /dev/null +++ b/packages/network-cli/README.md @@ -0,0 +1,122 @@ +# symbol-network + +CLI tools to create node clusters for new or existing networks. This cli handles the creation and distribution of the nemesis block. + +[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io) +[![Version](https://img.shields.io/npm/v/symbol-network.svg)](https://npmjs.org/package/symbol-network) +[![Downloads/week](https://img.shields.io/npm/dw/symbol-network.svg)](https://npmjs.org/package/symbol-network) +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +[![Build Status](https://travis-ci.com/symbol/symbol-bootstrap.svg?branch=main)](https://travis-ci.com/symbol/symbol-bootstrap) +[![Coverage Status](https://coveralls.io/repos/github/symbol/symbol-bootstrap/badge.svg?branch=main)](https://coveralls.io/github/symbol/symbol-bootstrap?branch=main) +[![Api Doc](https://img.shields.io/badge/api-doc-blue.svg)](../../) + + +* [symbol-network](#symbol-network) +* [Why this tool?](#why-this-tool) +* [Requirements](#requirements) +* [Installation](#installation) +* [Usage](#usage) +* [Commands](#commands) +* [Command Topics](#command-topics) +* [Development](#development) + + +# Why this tool? + +To handle dozens or hundreds of Symbol Nodes in "cattle" style, where nodes are created and managed in bundles. + +If you are creating a Symbol node for the first time, please have look at the [symbol-bootstrap](../bootstrap-cli) cli. + +# Requirements + +- Node 12.0.0+ +- Docker 18.3.0+ +- Docker Compose 1.25.0+ +- Symbol Bootstrap 1.1.0+. + +# Installation + +Before installing this tool, you need to install the symbol-bootstrap cli first. +Please follow the Please follow the [instructions](../bootstrap-cli/README.md#installation). + +It's recommended to run the commands from en empty working dir. + + +```sh-session +$ npm install -g symbol-network +$ symbol-network COMMAND +running command... +$ symbol-network (-v|--version|version) +symbol-network/0.0.1-alpha.0 linux-x64 node-v12.22.1 +$ symbol-network --help [COMMAND] +USAGE + $ symbol-network COMMAND +... +``` + + +# Usage + +After installing the tool. Run: + +```sh-session +$ mkdir my-network-workspace +$ cd my-network-workspace +$ symbol-network verify +$ symbol-network init + +``` + +and follow the instructions. + +The wizard style CLI will guide you in the process of creating the nodes. The tool creates a bunch of files and folders. + +When creating nodes to an existing network the files and folders are: + +- `network-input.yml`: This file is created by the `symbol-network init`. It generates and defines the initial node layout, describing how many nodes of each type you want to create. +- `network.yml`: This file is created by the `symbol-network expandNodes` and mantained by the following commands. It's the "expansion" of `network-input.yml` file where each node layed out individually. It defines your node cluster. +- `nodes`: The folder that contains the final node configurations ready to deploy. The folder is created and maintained by the `symbol-network configureNodes` command. +- `key-store.yml`: A file that stores the private keys and voting key files of the nodes. This file is created by the default private data storage. This can be extended to store data somewhere else, like for example AWS Secrets. + +In addition, for new networks, the you sill see the following files and folders are: + +- `custom-network-preset.yml`: This files defines the configuration of it. It's the "--preset mainnet/testnet" for your new network. You can share this file with other members that want to connect to your new private network. +- `nemesis-target`: The target of the nemesis node. You can use this initial node to try the network before deploying the final nodes. +- `nemesis-seed`: The seed folder copied from the `nemesis-target`. You can share with other members that want to connect to your network. + +# Commands + + +# Command Topics + +* [`symbol-network autocomplete`](docs/autocomplete.md) - display autocomplete installation instructions +* [`symbol-network configureNodes`](docs/configureNodes.md) - This is the last step of the node cluster setup that generates and updates each node's configuration. +* [`symbol-network displayResolvedNetworkPreset`](docs/displayResolvedNetworkPreset.md) - It displays the resolved network preset (Bootstrap's shared + custom-network-preset.yml). +* [`symbol-network expandNodes`](docs/expandNodes.md) - This "one-time" command is the second step configuring the node cluster for an existing an network or a new network. +* [`symbol-network generateNemesis`](docs/generateNemesis.md) - This "one-time" command is the third step when creating a new network after running the "expandNodes" command. +* [`symbol-network healthCheck`](docs/healthCheck.md) - It health checks the nodes of the network once the network is running by performing several remote tests. +* [`symbol-network help`](docs/help.md) - display help for symbol-network +* [`symbol-network init`](docs/init.md) - This command is the first step configuring the node cluster for an existing an network or a new network. +* [`symbol-network link`](docs/link.md) - It announces VRF and Voting Link transactions for all the nodes to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network. +* [`symbol-network verify`](docs/verify.md) - It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue. + + + +# Development + +If you want to contribute to this tool, clone this repo, and run: + +``` +npm run init +npm run build +cd package/network-cli +npm install -g +``` + +Then, `symbol-network` runs from the source code. You can now try your features after changing the code. + +Pull Requests are appreciated! Please follow the contributing [guidelines](../../CONTRIBUTING.md). + +Note: cloning this repo is only for people that want to tune the tool in a way it cannot be configured. If this is your case, please provide a feature request. + +General users should install this tool like any other node module. diff --git a/packages/network-cli/bin/run b/packages/network-cli/bin/run new file mode 100755 index 000000000..30b14e177 --- /dev/null +++ b/packages/network-cli/bin/run @@ -0,0 +1,5 @@ +#!/usr/bin/env node + +require('@oclif/command').run() +.then(require('@oclif/command/flush')) +.catch(require('@oclif/errors/handle')) diff --git a/packages/network-cli/bin/run.cmd b/packages/network-cli/bin/run.cmd new file mode 100644 index 000000000..968fc3075 --- /dev/null +++ b/packages/network-cli/bin/run.cmd @@ -0,0 +1,3 @@ +@echo off + +node "%~dp0\run" %* diff --git a/packages/network-cli/docs/autocomplete.md b/packages/network-cli/docs/autocomplete.md new file mode 100644 index 000000000..b8d0a12ad --- /dev/null +++ b/packages/network-cli/docs/autocomplete.md @@ -0,0 +1,29 @@ +`symbol-network autocomplete` +============================= + +display autocomplete installation instructions + +* [`symbol-network autocomplete [SHELL]`](#symbol-network-autocomplete-shell) + +## `symbol-network autocomplete [SHELL]` + +display autocomplete installation instructions + +``` +USAGE + $ symbol-network autocomplete [SHELL] + +ARGUMENTS + SHELL shell type + +OPTIONS + -r, --refresh-cache Refresh cache (ignores displaying instructions) + +EXAMPLES + $ symbol-network autocomplete + $ symbol-network autocomplete bash + $ symbol-network autocomplete zsh + $ symbol-network autocomplete --refresh-cache +``` + +_See code: [@oclif/plugin-autocomplete](https://github.com/oclif/plugin-autocomplete/blob/v0.3.0/src/commands/autocomplete/index.ts)_ diff --git a/packages/network-cli/docs/configureNodes.md b/packages/network-cli/docs/configureNodes.md new file mode 100644 index 000000000..8e21a027c --- /dev/null +++ b/packages/network-cli/docs/configureNodes.md @@ -0,0 +1,48 @@ +`symbol-network configureNodes` +=============================== + +This is the last step of the node cluster setup that generates and updates each node's configuration. + +Each node defined in the "network.yml" file will have it's own symbol-bootstrap "target" folder. Each folder can be then be deployed into the final node boxes like in AWS. + +This command can be executed multiple times if you need to update or upgrade your nodes. Then you can redeploy the configuration in the final the node boxes. + +* [`symbol-network configureNodes`](#symbol-network-configurenodes) + +## `symbol-network configureNodes` + +This is the last step of the node cluster setup that generates and updates each node's configuration. + +``` +USAGE + $ symbol-network configureNodes + +OPTIONS + -h, --help It shows the help of this command. + + --noNodePassword When provided, the tool will not use a password, so private keys will be stored in plain + text. Use with caution. + + --noPassword When provided, the tool will not use a password, so private keys will be stored in plain + text. Use with caution. + + --nodePassword=nodePassword NODE PASSWORD: A password used to encrypt and decrypt each node configuration (Inside the + nodes folder). + + --offline Use --offline If you are creating the nodes for the first time and there is information + to be updated from the current running network. + + --password=password MASTER PASSWORD: A password used to encrypt and decrypt the local key store. This cli + prompts for a password by default, can be provided in the command line (--password=XXXX) + or disabled in the command line (--noPassword). + +DESCRIPTION + Each node defined in the "network.yml" file will have it's own symbol-bootstrap "target" folder. Each folder can be + then be deployed into the final node boxes like in AWS. + + This command can be executed multiple times if you need to update or upgrade your nodes. Then you can redeploy the + configuration in the final the node boxes. + +EXAMPLE + $ symbol-network configureNodes +``` diff --git a/packages/network-cli/docs/displayResolvedNetworkPreset.md b/packages/network-cli/docs/displayResolvedNetworkPreset.md new file mode 100644 index 000000000..d375d4df8 --- /dev/null +++ b/packages/network-cli/docs/displayResolvedNetworkPreset.md @@ -0,0 +1,31 @@ +`symbol-network displayResolvedNetworkPreset` +============================================= + +It displays the resolved network preset (Bootstrap's shared + custom-network-preset.yml). + +This command it's useful to review the configuration on of your new network. Any customization to be performed can be done by upgrading or adding the properties to the custom-network-preset.yml file. + +It's recommended you only add the customizations for your network in the final custom-network-preset.yml. + +* [`symbol-network displayResolvedNetworkPreset`](#symbol-network-displayresolvednetworkpreset) + +## `symbol-network displayResolvedNetworkPreset` + +It displays the resolved network preset (Bootstrap's shared + custom-network-preset.yml). + +``` +USAGE + $ symbol-network displayResolvedNetworkPreset + +OPTIONS + -h, --help It shows the help of this command. + +DESCRIPTION + This command it's useful to review the configuration on of your new network. Any customization to be performed can be + done by upgrading or adding the properties to the custom-network-preset.yml file. + + It's recommended you only add the customizations for your network in the final custom-network-preset.yml. + +EXAMPLE + $ symbol-network displayResolvedNetworkPreset +``` diff --git a/packages/network-cli/docs/expandNodes.md b/packages/network-cli/docs/expandNodes.md new file mode 100644 index 000000000..65f32ef87 --- /dev/null +++ b/packages/network-cli/docs/expandNodes.md @@ -0,0 +1,34 @@ +`symbol-network expandNodes` +============================ + +This "one-time" command is the second step configuring the node cluster for an existing an network or a new network. + +After running the 'init' command and you have revisited the 'network-input.yml' files, you can run this command to convert the list of node types to the final list of nodes you want to create saved in the initial 'network.yml' file. + +* [`symbol-network expandNodes`](#symbol-network-expandnodes) + +## `symbol-network expandNodes` + +This "one-time" command is the second step configuring the node cluster for an existing an network or a new network. + +``` +USAGE + $ symbol-network expandNodes + +OPTIONS + -h, --help It shows the help of this command. + + --noPassword When provided, the tool will not use a password, so private keys will be stored in plain text. + Use with caution. + + --password=password MASTER PASSWORD: A password used to encrypt and decrypt the local key store. This cli prompts for + a password by default, can be provided in the command line (--password=XXXX) or disabled in the + command line (--noPassword). + +DESCRIPTION + After running the 'init' command and you have revisited the 'network-input.yml' files, you can run this command to + convert the list of node types to the final list of nodes you want to create saved in the initial 'network.yml' file. + +EXAMPLE + $ symbol-network expandNodes +``` diff --git a/packages/network-cli/docs/generateNemesis.md b/packages/network-cli/docs/generateNemesis.md new file mode 100644 index 000000000..d6f7cd43b --- /dev/null +++ b/packages/network-cli/docs/generateNemesis.md @@ -0,0 +1,41 @@ +`symbol-network generateNemesis` +================================ + +This "one-time" command is the third step when creating a new network after running the "expandNodes" command. + +This step is only required when you are creating a new network, if you are creating a node cluster of an existing network you can skip this step and go directly to the "configureNodes" command. + +After running this command, your new network nemesis seed would be created. It also generates a dummy node that you can run to try before deploying it into production. + +* [`symbol-network generateNemesis`](#symbol-network-generatenemesis) + +## `symbol-network generateNemesis` + +This "one-time" command is the third step when creating a new network after running the "expandNodes" command. + +``` +USAGE + $ symbol-network generateNemesis + +OPTIONS + -h, --help It shows the help of this command. + + --noPassword When provided, the tool will not use a password, so private keys will be stored in plain text. + Use with caution. + + --password=password MASTER PASSWORD: A password used to encrypt and decrypt the local key store. This cli prompts for + a password by default, can be provided in the command line (--password=XXXX) or disabled in the + command line (--noPassword). + + --regenerate To regenerate the nemesis block. This will drop the existing nemesis block and node configuration + +DESCRIPTION + This step is only required when you are creating a new network, if you are creating a node cluster of an existing + network you can skip this step and go directly to the "configureNodes" command. + + After running this command, your new network nemesis seed would be created. It also generates a dummy node that you + can run to try before deploying it into production. + +EXAMPLE + $ symbol-network generateNemesis +``` diff --git a/packages/network-cli/docs/healthCheck.md b/packages/network-cli/docs/healthCheck.md new file mode 100644 index 000000000..458c7f4f0 --- /dev/null +++ b/packages/network-cli/docs/healthCheck.md @@ -0,0 +1,34 @@ +`symbol-network healthCheck` +============================ + +It health checks the nodes of the network once the network is running by performing several remote tests. + +* [`symbol-network healthCheck`](#symbol-network-healthcheck) + +## `symbol-network healthCheck` + +It health checks the nodes of the network once the network is running by performing several remote tests. + +``` +USAGE + $ symbol-network healthCheck + +OPTIONS + -h, --help It shows the help of + this command. + + --maxBlockDiff=maxBlockDiff [default: 10] max block + diff + + --maxFinalizedBlockDiff=maxFinalizedBlockDiff [default: 5] max + finalized block diff + + --region=(us-east-1|us-west-1|us-west-2|eu-west-1|eu-central-1|ap-northeast-1|ap-southeast-1) filter the report by + region + + --timeout=timeout [default: 10000] test + timeout + +EXAMPLE + $ symbol-network healthCheck +``` diff --git a/packages/network-cli/docs/help.md b/packages/network-cli/docs/help.md new file mode 100644 index 000000000..8c7f2959d --- /dev/null +++ b/packages/network-cli/docs/help.md @@ -0,0 +1,23 @@ +`symbol-network help` +===================== + +display help for symbol-network + +* [`symbol-network help [COMMAND]`](#symbol-network-help-command) + +## `symbol-network help [COMMAND]` + +display help for symbol-network + +``` +USAGE + $ symbol-network help [COMMAND] + +ARGUMENTS + COMMAND command to show help for + +OPTIONS + --all see all commands in CLI +``` + +_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v3.2.2/src/commands/help.ts)_ diff --git a/packages/network-cli/docs/init.md b/packages/network-cli/docs/init.md new file mode 100644 index 000000000..3a1be06f1 --- /dev/null +++ b/packages/network-cli/docs/init.md @@ -0,0 +1,46 @@ +`symbol-network init` +===================== + +This command is the first step configuring the node cluster for an existing an network or a new network. + +It's prompt style wizard that asks a series of questions to start defining your nodes. The output of this command is a file containing a list of node types you want to create. + +This is a "one time" command that will kick the network setup process. Please follow the instructions on the screen. + +This commands creates the initial 'network-input.yml' and 'custom-network-preset.yml' files. + +* [`symbol-network init`](#symbol-network-init) + +## `symbol-network init` + +This command is the first step configuring the node cluster for an existing an network or a new network. + +``` +USAGE + $ symbol-network init + +OPTIONS + -h, --help It shows the help of this command. + + --noPassword When provided, the tool will not use a password, so private keys will be stored in plain text. + Use with caution. + + --password=password MASTER PASSWORD: A password used to encrypt and decrypt the local key store. This cli prompts for + a password by default, can be provided in the command line (--password=XXXX) or disabled in the + command line (--noPassword). + + --ready if --read is provided, the won't ask for confirmations + + --showPrivateKeys if --showPrivateKeys is provided, private keys will be displayed + +DESCRIPTION + It's prompt style wizard that asks a series of questions to start defining your nodes. The output of this command is a + file containing a list of node types you want to create. + + This is a "one time" command that will kick the network setup process. Please follow the instructions on the screen. + + This commands creates the initial 'network-input.yml' and 'custom-network-preset.yml' files. + +EXAMPLE + $ symbol-network init +``` diff --git a/packages/network-cli/docs/link.md b/packages/network-cli/docs/link.md new file mode 100644 index 000000000..b2b1f0dc1 --- /dev/null +++ b/packages/network-cli/docs/link.md @@ -0,0 +1,44 @@ +`symbol-network link` +===================== + +It announces VRF and Voting Link transactions for all the nodes to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network. + +* [`symbol-network link`](#symbol-network-link) + +## `symbol-network link` + +It announces VRF and Voting Link transactions for all the nodes to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network. + +``` +USAGE + $ symbol-network link + +OPTIONS + -h, --help It shows the help of this command. + + --maxFee=maxFee the max fee used when announcing (absolute). The node min multiplier will be used if it + is not provided. + + --noNodePassword When provided, the tool will not use a password, so private keys will be stored in plain + text. Use with caution. + + --noPassword When provided, the tool will not use a password, so private keys will be stored in plain + text. Use with caution. + + --nodePassword=nodePassword NODE PASSWORD: A password used to encrypt and decrypt each node configuration (Inside the + nodes folder). + + --password=password MASTER PASSWORD: A password used to encrypt and decrypt the local key store. This cli + prompts for a password by default, can be provided in the command line (--password=XXXX) + or disabled in the command line (--noPassword). + + --ready If --ready is provided, the command will not ask for confirmation when announcing + transactions. + + --unlink Perform "Unlink" transactions unlinking the voting and VRF keys from the node signer + account from all the nodes + +EXAMPLES + $ symbol-network link + $ echo "$MY_ENV_VAR_PASSWORD" | symbol-network link --unlink +``` diff --git a/packages/network-cli/docs/verify.md b/packages/network-cli/docs/verify.md new file mode 100644 index 000000000..b9d750ed8 --- /dev/null +++ b/packages/network-cli/docs/verify.md @@ -0,0 +1,21 @@ +`symbol-network verify` +======================= + +It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue. + +* [`symbol-network verify`](#symbol-network-verify) + +## `symbol-network verify` + +It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue. + +``` +USAGE + $ symbol-network verify + +OPTIONS + -h, --help It shows the help of this command. + +EXAMPLE + $ symbol-network verify +``` diff --git a/packages/network-cli/package-lock.json b/packages/network-cli/package-lock.json new file mode 100644 index 000000000..87ff5db67 --- /dev/null +++ b/packages/network-cli/package-lock.json @@ -0,0 +1,4745 @@ +{ + "name": "symbol-network", + "version": "0.0.1-alpha.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "symbol-network", + "version": "0.0.1-alpha.0", + "license": "Apache-2.0", + "dependencies": { + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@oclif/plugin-autocomplete": "^0.3.0", + "@oclif/plugin-help": "^3.2.2", + "figlet": "^1.5.0", + "inquirer": "^8.1.1", + "lodash": "^4.17.21", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "winston": "^3.3.3" + }, + "bin": { + "symbol-network": "bin/run" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@js-joda/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz", + "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oclif/command": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.0.tgz", + "integrity": "sha512-5vwpq6kbvwkQwKqAoOU3L72GZ3Ta8RRrewKj9OJRolx28KLJJ8Dg9Rf7obRwt5jQA9bkYd8gqzMTrI7H3xLfaw==", + "dependencies": { + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.3", + "@oclif/plugin-help": "^3", + "debug": "^4.1.1", + "semver": "^7.3.2" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "@oclif/config": "^1" + } + }, + "node_modules/@oclif/config": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.17.0.tgz", + "integrity": "sha512-Lmfuf6ubjQ4ifC/9bz1fSCHc6F6E653oyaRXxg+lgT4+bYf9bk+nqrUpAbrXyABkCqgIBiFr3J4zR/kiFdE1PA==", + "dependencies": { + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-wsl": "^2.1.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/errors": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz", + "integrity": "sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==", + "dependencies": { + "clean-stack": "^3.0.0", + "fs-extra": "^8.1", + "indent-string": "^4.0.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/linewrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", + "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==" + }, + "node_modules/@oclif/parser": { + "version": "3.8.5", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.5.tgz", + "integrity": "sha512-yojzeEfmSxjjkAvMRj0KzspXlMjCfBzNRPkWw8ZwOSoNWoJn+OCS/m/S+yfV6BvAM4u2lTzX9Y5rCbrFIgkJLg==", + "dependencies": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^2.4.2", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/parser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@oclif/plugin-autocomplete": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.3.0.tgz", + "integrity": "sha512-gCuIUCswvoU1BxDDvHSUGxW8rFagiacle8jHqE49+WnuniXD/N8NmJvnzmlNyc8qLE192CnKK+qYyAF+vaFQBg==", + "dependencies": { + "@oclif/command": "^1.5.13", + "@oclif/config": "^1.13.0", + "chalk": "^4.1.0", + "cli-ux": "^5.2.1", + "debug": "^4.0.0", + "fs-extra": "^9.0.1", + "moment": "^2.22.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@oclif/plugin-help": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.2.tgz", + "integrity": "sha512-SPZ8U8PBYK0n4srFjCLedk0jWU4QlxgEYLCXIBShJgOwPhTTQknkUlsEwaMIevvCU4iCQZhfMX+D8Pz5GZjFgA==", + "dependencies": { + "@oclif/command": "^1.5.20", + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.2.2", + "chalk": "^4.1.0", + "indent-string": "^4.0.0", + "lodash.template": "^4.4.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/plugin-help/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@oclif/plugin-help/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@oclif/plugin-help/node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@oclif/plugin-help/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@oclif/plugin-help/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@oclif/plugin-help/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/plugin-help/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@oclif/plugin-help/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/plugin-help/node_modules/wrap-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", + "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@oclif/plugin-help/node_modules/wrap-ansi/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@oclif/plugin-help/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@oclif/screen": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", + "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "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/bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "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/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.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": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=" + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/catbuffer-typescript": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/catbuffer-typescript/-/catbuffer-typescript-0.1.1.tgz", + "integrity": "sha512-r/z3UKG3YCCdsTEHRXGe3IQxA8OaBRBE31e9du2LOaLStGxYCmxUjfRtJ/DyKfgpS55fJPl3w/VFMnsfwIHmkA==" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "dependencies": { + "escape-string-regexp": "4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clean-stack/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-progress": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", + "integrity": "sha512-g7rLWfhAo/7pF+a/STFH/xPyosaL1zgADhI0OM83hl3c7S43iGvJWEAV2QuDOnQ8i6EMBj/u4+NTd0d5L+4JfA==", + "dependencies": { + "colors": "^1.1.2", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-ux": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.6.3.tgz", + "integrity": "sha512-/oDU4v8BiDjX2OKcSunGH0iGDiEtj2rZaGyqNuv9IT4CgcSMyVWAMfn0+rEHaOc4n9ka78B0wo1+N1QX89f7mw==", + "dependencies": { + "@oclif/command": "^1.6.0", + "@oclif/errors": "^1.2.1", + "@oclif/linewrap": "^1.0.0", + "@oclif/screen": "^1.0.3", + "ansi-escapes": "^4.3.0", + "ansi-styles": "^4.2.0", + "cardinal": "^2.1.1", + "chalk": "^4.1.0", + "clean-stack": "^3.0.0", + "cli-progress": "^3.4.0", + "extract-stack": "^2.0.0", + "fs-extra": "^8.1", + "hyperlinker": "^1.0.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "js-yaml": "^3.13.1", + "lodash": "^4.17.11", + "natural-orderby": "^2.0.1", + "object-treeify": "^1.1.4", + "password-prompt": "^1.1.2", + "semver": "^7.3.2", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "supports-color": "^8.1.0", + "supports-hyperlinks": "^2.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/cli-ux/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-ux/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-ux/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-ux/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-ux/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/cli-ux/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-ux/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "dependencies": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/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/crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dependencies": { + "clone": "^1.0.2" + } + }, + "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/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz", + "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "node_modules/fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fecha": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + }, + "node_modules/figlet": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", + "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/futoin-hkdf": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz", + "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==", + "engines": { + "node": ">=8" + } + }, + "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/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "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/hyperlinker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", + "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "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/inquirer": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.1.tgz", + "integrity": "sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.3.0", + "run-async": "^2.4.0", + "rxjs": "^6.6.6", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "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-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, + "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/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, + "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/js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logform": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "dependencies": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "triple-beam": "^1.3.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/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/merkletreejs": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.22.tgz", + "integrity": "sha512-MYWF5KoCkXcMkFtuB4O40k4yYxmhwb1TiaLvJaj1L5w4LQ66E2sukeslfJjGmaGqWHP4oMK06lgGZgODHxU3bw==", + "dependencies": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^3.1.9-1", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/merkletreejs/node_modules/crypto-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", + "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "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/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/natural-orderby": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", + "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==", + "engines": { + "node": "*" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-treeify": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", + "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "node_modules/password-prompt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", + "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", + "dependencies": { + "ansi-escapes": "^3.1.0", + "cross-spawn": "^6.0.5" + } + }, + "node_modules/password-prompt/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "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/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/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/redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "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/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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/simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "engines": { + "node": ">=0.10.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/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "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/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-openapi-typescript-fetch-client": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/symbol-openapi-typescript-fetch-client/-/symbol-openapi-typescript-fetch-client-0.11.2.tgz", + "integrity": "sha512-A1MAN8/UWlaCEibBf6zxkduZwDNSvWwLPp6JB0GeYI/FAOrw/9nLyuS/NJQ3siGAUclnuejH1wG7KdUg0/4RSw==" + }, + "node_modules/symbol-sdk": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-sdk/-/symbol-sdk-1.0.1.tgz", + "integrity": "sha512-G4sdGBfggTSqKs9XchMQAtOfl80Z2eARafxZnzje5qxzfUSQUCFYdBP7IJiA2PDoeyfXJJpzWWTlgq9EzvKm1A==", + "dependencies": { + "@js-joda/core": "^3.2.0", + "bluebird": "^3.7.2", + "catbuffer-typescript": "0.1.1", + "crypto-js": "^4.0.0", + "diff": "^4.0.2", + "futoin-hkdf": "^1.3.2", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "long": "^4.0.0", + "merkletreejs": "^0.2.9", + "minimist": "^1.2.5", + "node-fetch": "^2.6.0", + "ripemd160": "^2.0.2", + "rxjs": "^6.6.3", + "rxjs-compat": "^6.6.3", + "symbol-openapi-typescript-fetch-client": "0.11.2", + "tweetnacl": "^1.0.3", + "utf8": "^2.1.2", + "ws": "^7.3.1" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.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/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "node_modules/utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + }, + "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/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web3-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.4.0.tgz", + "integrity": "sha512-b8mEhwh/J928Xk+SQFjtqrR2EGPhpknWLcIt9aCpVPVRXiqjUGo/kpOHKz0azu9c6/onEJ9tWXZt0cVjmH0N5Q==", + "dependencies": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.12.1", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/winston": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "dependencies": { + "@dabh/diagnostics": "^2.0.2", + "async": "^3.1.0", + "is-stream": "^2.0.0", + "logform": "^2.2.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "dependencies": { + "readable-stream": "^2.3.7", + "triple-beam": "^1.2.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/winston-transport/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/winston-transport/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", + "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==", + "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/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + }, + "dependencies": { + "@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "@js-joda/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz", + "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@oclif/command": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.0.tgz", + "integrity": "sha512-5vwpq6kbvwkQwKqAoOU3L72GZ3Ta8RRrewKj9OJRolx28KLJJ8Dg9Rf7obRwt5jQA9bkYd8gqzMTrI7H3xLfaw==", + "requires": { + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.3", + "@oclif/plugin-help": "^3", + "debug": "^4.1.1", + "semver": "^7.3.2" + } + }, + "@oclif/config": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.17.0.tgz", + "integrity": "sha512-Lmfuf6ubjQ4ifC/9bz1fSCHc6F6E653oyaRXxg+lgT4+bYf9bk+nqrUpAbrXyABkCqgIBiFr3J4zR/kiFdE1PA==", + "requires": { + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-wsl": "^2.1.1", + "tslib": "^2.0.0" + } + }, + "@oclif/errors": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz", + "integrity": "sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==", + "requires": { + "clean-stack": "^3.0.0", + "fs-extra": "^8.1", + "indent-string": "^4.0.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "@oclif/linewrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", + "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==" + }, + "@oclif/parser": { + "version": "3.8.5", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.5.tgz", + "integrity": "sha512-yojzeEfmSxjjkAvMRj0KzspXlMjCfBzNRPkWw8ZwOSoNWoJn+OCS/m/S+yfV6BvAM4u2lTzX9Y5rCbrFIgkJLg==", + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^2.4.2", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@oclif/plugin-autocomplete": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.3.0.tgz", + "integrity": "sha512-gCuIUCswvoU1BxDDvHSUGxW8rFagiacle8jHqE49+WnuniXD/N8NmJvnzmlNyc8qLE192CnKK+qYyAF+vaFQBg==", + "requires": { + "@oclif/command": "^1.5.13", + "@oclif/config": "^1.13.0", + "chalk": "^4.1.0", + "cli-ux": "^5.2.1", + "debug": "^4.0.0", + "fs-extra": "^9.0.1", + "moment": "^2.22.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "@oclif/plugin-help": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.2.tgz", + "integrity": "sha512-SPZ8U8PBYK0n4srFjCLedk0jWU4QlxgEYLCXIBShJgOwPhTTQknkUlsEwaMIevvCU4iCQZhfMX+D8Pz5GZjFgA==", + "requires": { + "@oclif/command": "^1.5.20", + "@oclif/config": "^1.15.1", + "@oclif/errors": "^1.2.2", + "chalk": "^4.1.0", + "indent-string": "^4.0.0", + "lodash.template": "^4.4.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", + "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + } + } + }, + "@oclif/screen": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", + "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==" + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "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==" + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "catbuffer-typescript": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/catbuffer-typescript/-/catbuffer-typescript-0.1.1.tgz", + "integrity": "sha512-r/z3UKG3YCCdsTEHRXGe3IQxA8OaBRBE31e9du2LOaLStGxYCmxUjfRtJ/DyKfgpS55fJPl3w/VFMnsfwIHmkA==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "requires": { + "escape-string-regexp": "4.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + } + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-progress": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", + "integrity": "sha512-g7rLWfhAo/7pF+a/STFH/xPyosaL1zgADhI0OM83hl3c7S43iGvJWEAV2QuDOnQ8i6EMBj/u4+NTd0d5L+4JfA==", + "requires": { + "colors": "^1.1.2", + "string-width": "^4.2.0" + } + }, + "cli-spinners": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" + }, + "cli-ux": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.6.3.tgz", + "integrity": "sha512-/oDU4v8BiDjX2OKcSunGH0iGDiEtj2rZaGyqNuv9IT4CgcSMyVWAMfn0+rEHaOc4n9ka78B0wo1+N1QX89f7mw==", + "requires": { + "@oclif/command": "^1.6.0", + "@oclif/errors": "^1.2.1", + "@oclif/linewrap": "^1.0.0", + "@oclif/screen": "^1.0.3", + "ansi-escapes": "^4.3.0", + "ansi-styles": "^4.2.0", + "cardinal": "^2.1.1", + "chalk": "^4.1.0", + "clean-stack": "^3.0.0", + "cli-progress": "^3.4.0", + "extract-stack": "^2.0.0", + "fs-extra": "^8.1", + "hyperlinker": "^1.0.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "js-yaml": "^3.13.1", + "lodash": "^4.17.11", + "natural-orderby": "^2.0.1", + "object-treeify": "^1.1.4", + "password-prompt": "^1.1.2", + "semver": "^7.3.2", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "supports-color": "^8.1.0", + "supports-hyperlinks": "^2.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extract-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz", + "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==" + }, + "fast-glob": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fecha": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + }, + "figlet": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", + "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "futoin-hkdf": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz", + "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==" + }, + "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" + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "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" + } + }, + "hyperlinker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", + "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.1.tgz", + "integrity": "sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.3.0", + "run-async": "^2.4.0", + "rxjs": "^6.6.6", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "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-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "logform": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "merkletreejs": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.22.tgz", + "integrity": "sha512-MYWF5KoCkXcMkFtuB4O40k4yYxmhwb1TiaLvJaj1L5w4LQ66E2sukeslfJjGmaGqWHP4oMK06lgGZgODHxU3bw==", + "requires": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^3.1.9-1", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "dependencies": { + "crypto-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", + "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + } + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "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=" + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "natural-orderby": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", + "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-treeify": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", + "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "password-prompt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", + "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", + "requires": { + "ansi-escapes": "^3.1.0", + "cross-spawn": "^6.0.5" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + } + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "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" + } + }, + "redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "requires": { + "esprima": "~4.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "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" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "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" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "requires": { + "is-hex-prefixed": "1.0.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" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "symbol-openapi-typescript-fetch-client": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/symbol-openapi-typescript-fetch-client/-/symbol-openapi-typescript-fetch-client-0.11.2.tgz", + "integrity": "sha512-A1MAN8/UWlaCEibBf6zxkduZwDNSvWwLPp6JB0GeYI/FAOrw/9nLyuS/NJQ3siGAUclnuejH1wG7KdUg0/4RSw==" + }, + "symbol-sdk": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-sdk/-/symbol-sdk-1.0.1.tgz", + "integrity": "sha512-G4sdGBfggTSqKs9XchMQAtOfl80Z2eARafxZnzje5qxzfUSQUCFYdBP7IJiA2PDoeyfXJJpzWWTlgq9EzvKm1A==", + "requires": { + "@js-joda/core": "^3.2.0", + "bluebird": "^3.7.2", + "catbuffer-typescript": "0.1.1", + "crypto-js": "^4.0.0", + "diff": "^4.0.2", + "futoin-hkdf": "^1.3.2", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "long": "^4.0.0", + "merkletreejs": "^0.2.9", + "minimist": "^1.2.5", + "node-fetch": "^2.6.0", + "ripemd160": "^2.0.2", + "rxjs": "^6.6.3", + "rxjs-compat": "^6.6.3", + "symbol-openapi-typescript-fetch-client": "0.11.2", + "tweetnacl": "^1.0.3", + "utf8": "^2.1.2", + "ws": "^7.3.1" + } + }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "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" + } + }, + "treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" + }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + }, + "underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, + "web3-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.4.0.tgz", + "integrity": "sha512-b8mEhwh/J928Xk+SQFjtqrR2EGPhpknWLcIt9aCpVPVRXiqjUGo/kpOHKz0azu9c6/onEJ9tWXZt0cVjmH0N5Q==", + "requires": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.12.1", + "utf8": "3.0.0" + }, + "dependencies": { + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } + }, + "winston": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "requires": { + "@dabh/diagnostics": "^2.0.2", + "async": "^3.1.0", + "is-stream": "^2.0.0", + "logform": "^2.2.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" + } + }, + "winston-transport": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "requires": { + "readable-stream": "^2.3.7", + "triple-beam": "^1.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", + "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==", + "requires": {} + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "requires": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "requires": { + "xhr-request": "^1.1.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/packages/network-cli/package.json b/packages/network-cli/package.json new file mode 100644 index 000000000..3c108ae62 --- /dev/null +++ b/packages/network-cli/package.json @@ -0,0 +1,70 @@ +{ + "name": "symbol-network", + "version": "0.0.1-alpha.0", + "description": "", + "bin": { + "symbol-network": "bin/run" + }, + "homepage": "https://github.com/symbol/symbol-bootstrap/packages/tree/main/network-cli", + "bugs": "https://github.com/symbol/symbol-bootstrap/issues", + "scripts": { + "doc": "shx mkdir -p ts-docs && typedoc --out \"ts-docs\" src && touch ./ts-docs/.nojekyll", + "clean": "npx shx rm -rf ./lib", + "purge": "npx shx rm -rf lib coverage node_modules target .nyc_output logs.log ts-docs", + "lint": "eslint --cache src/ test/ --ext .ts", + "lint:fix": "eslint src/ test/ --ext .ts --fix", + "prettier": "prettier --write ./src", + "style:fix": "npm run create-index-files && npm run prettier && npm run lint:fix && npm run oclif-doc", + "create-index-files": "cti create ./src -b -n -e commands", + "postpack": "npx shx rm -f oclif.manifest.json", + "posttest": "eslint src/ test/ --ext .ts", + "oclif-doc": "oclif-dev manifest && oclif-dev readme --multi", + "watch": "tsc -p tsconfig.build.json --watch", + "compile": "tsc -p tsconfig.build.json", + "build": "npx shx rm -rf lib && npm run compile", + "prepack": "npx shx rm -rf lib && npm run compile && npm run oclif-doc", + "test": "nyc --reporter=lcov --extension .ts mocha -r ts-node/register --timeout 900000 --forbid-only \"test/**/*.test.ts\"", + "e2e": "nyc --reporter=lcov --extension .ts mocha -r ts-node/register --timeout 900000 --forbid-only \"test/**/*.e2e.ts\"", + "version": "echo $npm_package_version", + "install-cli": "npm pack && npm i -g" + }, + "engines": { + "node": ">=12.0.0" + }, + "files": [ + "/bin", + "/lib", + "/npm-shrinkwrap.json", + "/oclif.manifest.json" + ], + "oclif": { + "commands": "./lib/commands", + "bin": "symbol-network", + "plugins": [ + "@oclif/plugin-autocomplete", + "@oclif/plugin-help" + ] + }, + "keywords": [], + "author": "Fernando Boucquez ", + "license": "Apache-2.0", + "mocha": { + "timeout": 40000 + }, + "types": "lib/index.d.ts", + "dependencies": { + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@oclif/plugin-autocomplete": "^0.3.0", + "@oclif/plugin-help": "^3.2.2", + "figlet": "^1.5.0", + "inquirer": "^8.1.1", + "lodash": "^4.17.21", + "symbol-bootstrap-core": "^1.1.0-alpha.0", + "symbol-network-core": "^0.0.1-alpha.0", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "winston": "^3.3.3" + }, + "gitHead": "b24acdda47ff73f56412c42b39f52dbf6d37686d" +} diff --git a/packages/network-cli/src/commands/configureNodes.ts b/packages/network-cli/src/commands/configureNodes.ts new file mode 100644 index 000000000..77fd68ef9 --- /dev/null +++ b/packages/network-cli/src/commands/configureNodes.ts @@ -0,0 +1,61 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command, flags } from '@oclif/command'; +import { IBooleanFlag, IOptionFlag } from '@oclif/parser/lib/flags'; +import { BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { NetworkService, NetworkUtils } from 'symbol-network-core'; +import { NetworkCommandUtils } from '../utils'; +export default class ConfigureNodes extends Command { + static description = `This is the last step of the node cluster setup that generates and updates each node's configuration. + +Each node defined in the "${NetworkUtils.NETWORK_FILE}" file will have it's own symbol-bootstrap "target" folder. Each folder can be then be deployed into the final node boxes like in AWS. + +This command can be executed multiple times if you need to update or upgrade your nodes. Then you can redeploy the configuration in the final the node boxes. +`; + + static examples = [`$ ${NetworkCommandUtils.CLI_TOOL} configureNodes`]; + + static flags: { + help: IBooleanFlag; + password: IOptionFlag; + noPassword: IBooleanFlag; + nodePassword: IOptionFlag; + noNodePassword: IBooleanFlag; + offline: IBooleanFlag; + } = { + help: NetworkCommandUtils.helpFlag, + password: NetworkCommandUtils.passwordFlag, + noPassword: NetworkCommandUtils.noPasswordFlag, + nodePassword: NetworkCommandUtils.nodePasswordFlag, + noNodePassword: NetworkCommandUtils.noNodePasswordFlag, + offline: flags.boolean({ + description: + 'Use --offline If you are creating the nodes for the first time and there is information to be updated from the current running network.', + default: false, + }), + }; + + public async run(): Promise { + NetworkCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.Console); + const { flags } = this.parse(ConfigureNodes); + const workingDir = BootstrapUtils.defaultWorkingDir; + const keyStore = await NetworkCommandUtils.createStore(flags, logger, true, workingDir); + const nodePassword = await NetworkCommandUtils.resolveNodePassword(flags, logger); + await new NetworkService(logger, workingDir).updateNodes(keyStore, { nodePassword, offline: flags.offline }); + } +} diff --git a/packages/network-cli/src/commands/displayResolvedNetworkPreset.ts b/packages/network-cli/src/commands/displayResolvedNetworkPreset.ts new file mode 100644 index 000000000..a0415db76 --- /dev/null +++ b/packages/network-cli/src/commands/displayResolvedNetworkPreset.ts @@ -0,0 +1,64 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Command } from '@oclif/command'; +import { IBooleanFlag } from '@oclif/parser/lib/flags'; +import { existsSync } from 'fs'; +import { BootstrapUtils, ConfigLoader, CustomPreset, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { NetworkUtils } from 'symbol-network-core'; +import { NetworkCommandUtils } from '../utils'; + +export class DisplayResolvedNetworkPreset extends Command { + static description = `It displays the resolved network preset (Bootstrap's shared + ${NetworkUtils.NETWORK_PRESET_FILE}). + +This command it's useful to review the configuration on of your new network. Any customization to be performed can be done by upgrading or adding the properties to the ${NetworkUtils.NETWORK_PRESET_FILE} file. + +It's recommended you only add the customizations for your network in the final ${NetworkUtils.NETWORK_PRESET_FILE}. + `; + + static examples = [`$ ${NetworkCommandUtils.CLI_TOOL} displayResolvedNetworkPreset`]; + + static flags: { + help: IBooleanFlag; + } = { + help: NetworkCommandUtils.helpFlag, + }; + + public async run(): Promise { + NetworkCommandUtils.showBanner(); + if (!existsSync(NetworkUtils.NETWORK_PRESET_FILE)) { + throw new Error( + `${NetworkUtils.NETWORK_PRESET_FILE} does not exist. Have you executed the 'init' command? Are you creating a new network?`, + ); + } + const logger = LoggerFactory.getLogger(LogType.Console); + const configLoader = new ConfigLoader(logger); + const shared = ConfigLoader.loadSharedPreset(); + const network = (await BootstrapUtils.loadYaml(NetworkUtils.NETWORK_PRESET_FILE, undefined)) as CustomPreset; + const merged = configLoader.mergePresets(shared, network); + logger.info(''); + logger.info('Resolved Network Preset:'); + logger.info(''); + logger.info('------'); + logger.info(''); + logger.info(BootstrapUtils.toYaml(merged)); + logger.info('------'); + logger.info(''); + logger.info( + `You can tune your network by adding or updating the displayed properties into ${NetworkUtils.NETWORK_PRESET_FILE} file`, + ); + logger.info(''); + } +} diff --git a/packages/network-cli/src/commands/expandNodes.ts b/packages/network-cli/src/commands/expandNodes.ts new file mode 100644 index 000000000..1f1816811 --- /dev/null +++ b/packages/network-cli/src/commands/expandNodes.ts @@ -0,0 +1,83 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command } from '@oclif/command'; +import { IBooleanFlag, IOptionFlag } from '@oclif/parser/lib/flags'; +import { BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { NetworkService, NetworkUtils } from 'symbol-network-core'; +import { NetworkCommandUtils } from '../utils'; +export default class ExpandNodes extends Command { + static description = `This "one-time" command is the second step configuring the node cluster for an existing an network or a new network. + +After running the 'init' command and you have revisited the '${NetworkUtils.NETWORK_INPUT_FILE}' files, you can run this command to convert the list of node types to the final list of nodes you want to create saved in the initial '${NetworkUtils.NETWORK_FILE}' file. + +`; + + static examples = [`$ ${NetworkCommandUtils.CLI_TOOL} expandNodes`]; + + static flags: { + help: IBooleanFlag; + password: IOptionFlag; + noPassword: IBooleanFlag; + } = { + help: NetworkCommandUtils.helpFlag, + password: NetworkCommandUtils.passwordFlag, + noPassword: NetworkCommandUtils.noPasswordFlag, + }; + + public async run(): Promise { + NetworkCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.Console); + const { flags } = this.parse(ExpandNodes); + const workingDir = BootstrapUtils.defaultWorkingDir; + const keyStore = await NetworkCommandUtils.createStore(flags, logger, false, workingDir); + const service = new NetworkService(logger, workingDir); + const output = await service.expandNodes(keyStore); + + if (output.isNewNetwork) { + logger.info(''); + logger.info( + `Revisit the ${NetworkUtils.NETWORK_INPUT_FILE}. You can tune a node's property like the hostname or friendly name.`, + ); + logger.info(''); + logger.info('You can also run:'); + logger.info(''); + logger.info(`$ ${NetworkCommandUtils.CLI_TOOL} displayResolvedNetworkPreset`); + logger.info(''); + logger.info(`To display the network preset to be used. You can tune it by updating ${NetworkUtils.NETWORK_PRESET_FILE} `); + + logger.info(''); + logger.info('Once happy, run:'); + logger.info(''); + logger.info(`$ ${NetworkCommandUtils.CLI_TOOL} generateNemesis`); + logger.info(''); + logger.info( + 'To generate the nemesis node based on the initial nodes you have defined. The nodes will be fully linked and funded from block 1!. ', + ); + } else { + logger.info(''); + logger.info( + `Revisit the ${NetworkUtils.NETWORK_INPUT_FILE} changing any node tunning you wan to do, for example a hostname or friendly name.`, + ); + logger.info(''); + logger.info('Once happy, run:'); + logger.info(''); + logger.info(`$ ${NetworkCommandUtils.CLI_TOOL} configureNodes`); + logger.info(''); + logger.info(`To generate the nodes' configuration.`); + } + } +} diff --git a/packages/network-cli/src/commands/generateNemesis.ts b/packages/network-cli/src/commands/generateNemesis.ts new file mode 100644 index 000000000..d9898c2ea --- /dev/null +++ b/packages/network-cli/src/commands/generateNemesis.ts @@ -0,0 +1,90 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command, flags } from '@oclif/command'; +import { IBooleanFlag, IOptionFlag } from '@oclif/parser/lib/flags'; +import { BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { NetworkService, NetworkUtils } from 'symbol-network-core'; +import { NetworkCommandUtils } from '../utils'; +export default class GenerateNemesis extends Command { + static description = `This "one-time" command is the third step when creating a new network after running the "expandNodes" command. + +This step is only required when you are creating a new network, if you are creating a node cluster of an existing network you can skip this step and go directly to the "configureNodes" command. + +After running this command, your new network nemesis seed would be created. It also generates a dummy node that you can run to try before deploying it into production. +`; + + static examples = [`$ ${NetworkCommandUtils.CLI_TOOL} generateNemesis`]; + + static flags: { + help: IBooleanFlag; + regenerate: IBooleanFlag; + password: IOptionFlag; + noPassword: IBooleanFlag; + } = { + help: NetworkCommandUtils.helpFlag, + regenerate: flags.boolean({ + description: 'To regenerate the nemesis block. This will drop the existing nemesis block and node configuration', + default: false, + }), + password: NetworkCommandUtils.passwordFlag, + noPassword: NetworkCommandUtils.noPasswordFlag, + }; + + public async run(): Promise { + const { flags } = this.parse(GenerateNemesis); + NetworkCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.Console); + const regenerate = flags.regenerate; + const workingDir = BootstrapUtils.defaultWorkingDir; + const keyStore = await NetworkCommandUtils.createStore(flags, logger, false, workingDir); + const service = new NetworkService(logger, workingDir); + const nemesisTargetFolder = await service.generateNemesis(keyStore, { regenerate }); + logger.info(''); + logger.info(''); + logger.info(`The ${NetworkUtils.NETWORK_FILE} file has been updated!`); + logger.info(''); + logger.info('Nemesis block has been generated. To verify the block using a demo box run:'); + logger.info(''); + logger.info(`$ symbol-bootstrap start -t ${nemesisTargetFolder} --noPassword --detached --healthCheck --report`); + logger.info(''); + logger.info(`Try the demo node by going to:`); + logger.info(' - Rest Accounts - http://localhost:3000/accounts'); + logger.info(' - Rest Mosaics - http://localhost:3000/mosaics'); + logger.info(' - Rest Confirmed Transactions - http://localhost:3000/transactions/confirmed'); + logger.info(' - Rest Chain Info - http://localhost:3000/chain/info'); + logger.info(' - Rest Node Info - http://localhost:3000/node/info'); + logger.info(' - Web Wallet - http://localhost:80'); + logger.info(' - Explorer - http://localhost:90'); + logger.info(' - Faucet - http://localhost:100'); + logger.info(''); + logger.info('To stop the demo node:'); + logger.info(''); + logger.info(`$ symbol-bootstrap stop -t ${nemesisTargetFolder}`); + logger.info(''); + logger.info(`Once you are happy, run:`); + logger.info(''); + logger.info(`$ ${NetworkCommandUtils.CLI_TOOL} configureNodes --offline`); + logger.info(''); + logger.info(`To generate the nodes' configuration ready to be deployed.`); + + logger.info(''); + logger.info( + `Once your network is running, other people can join your new network by sharing with them the '${NetworkUtils.NETWORK_PRESET_FILE}' file and '${NetworkUtils.NEMESIS_SEED_FOLDER}' folder.`, + ); + logger.info(''); + } +} diff --git a/packages/network-cli/src/commands/healthCheck.ts b/packages/network-cli/src/commands/healthCheck.ts new file mode 100644 index 000000000..15a74b58d --- /dev/null +++ b/packages/network-cli/src/commands/healthCheck.ts @@ -0,0 +1,48 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Command, flags } from '@oclif/command'; +import { IOptionFlag } from '@oclif/command/lib/flags'; +import { IBooleanFlag } from '@oclif/parser/lib/flags'; +import { BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { NetworkService, Region } from 'symbol-network-core'; +import { NetworkCommandUtils } from '../utils'; +export default class HealthCheck extends Command { + static description = `It health checks the nodes of the network once the network is running by performing several remote tests.`; + + static examples = [`$ ${NetworkCommandUtils.CLI_TOOL} healthCheck`]; + + static flags: { + help: IBooleanFlag; + timeout: IOptionFlag; + maxBlockDiff: IOptionFlag; + maxFinalizedBlockDiff: IOptionFlag; + region: IOptionFlag; + } = { + help: NetworkCommandUtils.helpFlag, + timeout: flags.integer({ description: 'test timeout', default: 10000 }), + maxBlockDiff: flags.integer({ description: 'max block diff', default: 10 }), + maxFinalizedBlockDiff: flags.integer({ description: 'max finalized block diff', default: 5 }), + region: flags.enum({ description: 'filter the report by region', required: false, options: Object.values(Region) }), + }; + + public async run(): Promise { + const { flags } = this.parse(HealthCheck); + NetworkCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.ConsoleLog); + const workingDir = BootstrapUtils.defaultWorkingDir; + return new NetworkService(logger, workingDir).healthCheck(flags); + } +} diff --git a/packages/network-cli/src/commands/init.ts b/packages/network-cli/src/commands/init.ts new file mode 100644 index 000000000..24cf09e73 --- /dev/null +++ b/packages/network-cli/src/commands/init.ts @@ -0,0 +1,60 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Command, flags } from '@oclif/command'; +import { IOptionFlag } from '@oclif/command/lib/flags'; +import { IBooleanFlag } from '@oclif/parser/lib/flags'; +import { BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { NetworkUtils } from 'symbol-network-core'; +import { InitService, NetworkCommandUtils } from '../utils'; +export default class Init extends Command { + static description = `This command is the first step configuring the node cluster for an existing an network or a new network. + +It's prompt style wizard that asks a series of questions to start defining your nodes. The output of this command is a file containing a list of node types you want to create. + +This is a "one time" command that will kick the network setup process. Please follow the instructions on the screen. + +This commands creates the initial '${NetworkUtils.NETWORK_INPUT_FILE}' and '${NetworkUtils.NETWORK_PRESET_FILE}' files. +`; + + static examples = [`$ ${NetworkCommandUtils.CLI_TOOL} init`]; + static flags: { + help: IBooleanFlag; + ready: IBooleanFlag; + showPrivateKeys: IBooleanFlag; + password: IOptionFlag; + noPassword: IBooleanFlag; + } = { + help: NetworkCommandUtils.helpFlag, + ready: flags.boolean({ + description: `if --read is provided, the won't ask for confirmations`, + default: false, + }), + showPrivateKeys: flags.boolean({ + description: `if --showPrivateKeys is provided, private keys will be displayed`, + default: false, + }), + password: NetworkCommandUtils.passwordFlag, + noPassword: NetworkCommandUtils.noPasswordFlag, + }; + + public async run(): Promise { + const { flags } = this.parse(Init); + NetworkCommandUtils.showBanner(); + const logger = LoggerFactory.getLogger(LogType.ConsoleLog); + const workingDir = BootstrapUtils.defaultWorkingDir; + return new InitService(logger, workingDir, flags as any).execute(); + } +} diff --git a/packages/network-cli/src/commands/link.ts b/packages/network-cli/src/commands/link.ts new file mode 100644 index 000000000..1281dfb6d --- /dev/null +++ b/packages/network-cli/src/commands/link.ts @@ -0,0 +1,70 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command, flags } from '@oclif/command'; +import { IBooleanFlag, IOptionFlag } from '@oclif/parser/lib/flags'; +import { BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { NetworkService } from 'symbol-network-core'; +import { NetworkCommandUtils } from '../utils'; +export default class Link extends Command { + static description = `It announces VRF and Voting Link transactions for all the nodes to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network.`; + + static examples = [`$ symbol-network link`, `$ echo "$MY_ENV_VAR_PASSWORD" | symbol-network link --unlink`]; + + static flags: { + help: IBooleanFlag; + unlink: IBooleanFlag; + ready: IBooleanFlag; + maxFee: IOptionFlag; + password: IOptionFlag; + noPassword: IBooleanFlag; + nodePassword: IOptionFlag; + noNodePassword: IBooleanFlag; + } = { + help: NetworkCommandUtils.helpFlag, + unlink: flags.boolean({ + description: 'Perform "Unlink" transactions unlinking the voting and VRF keys from the node signer account from all the nodes', + default: false, + }), + ready: flags.boolean({ + description: 'If --ready is provided, the command will not ask for confirmation when announcing transactions.', + default: false, + }), + maxFee: flags.integer({ + description: 'the max fee used when announcing (absolute). The node min multiplier will be used if it is not provided.', + }), + password: NetworkCommandUtils.passwordFlag, + noPassword: NetworkCommandUtils.noPasswordFlag, + nodePassword: NetworkCommandUtils.nodePasswordFlag, + noNodePassword: NetworkCommandUtils.noNodePasswordFlag, + }; + + public async run(): Promise { + const { flags } = this.parse(Link); + const logger = LoggerFactory.getLogger(LogType.ConsoleLog); + NetworkCommandUtils.showBanner(); + const workingDir = BootstrapUtils.defaultWorkingDir; + const keyStore = await NetworkCommandUtils.createStore(flags, logger, true, workingDir); + const service = new NetworkService(logger, workingDir); + const nodePassword = await NetworkCommandUtils.resolveNodePassword(flags, logger); + const params = { + password: nodePassword, + unlink: flags.unlink, + maxFee: flags.maxFee, + }; + await service.linkNodes(keyStore, params); + } +} diff --git a/packages/network-cli/src/commands/verify.ts b/packages/network-cli/src/commands/verify.ts new file mode 100644 index 000000000..1d2e0916f --- /dev/null +++ b/packages/network-cli/src/commands/verify.ts @@ -0,0 +1,37 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Command } from '@oclif/command'; +import { BootstrapUtils, Logger, LoggerFactory, LogType, VerifyService } from 'symbol-bootstrap-core'; +import { NetworkCommandUtils } from '../utils'; + +export default class Verify extends Command { + static description = + 'It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue.'; + static examples = [`$ symbol-network verify`]; + + static flags = { + help: NetworkCommandUtils.helpFlag, + }; + + public async run(): Promise { + NetworkCommandUtils.showBanner(); + const logger: Logger = LoggerFactory.getLogger(LogType.ConsoleLog); + const service = new VerifyService(logger, { symbolBootstrap: BootstrapUtils.VERSION.split('-')[0] }); + const report = await service.createReport(); + service.logReport(report, logger); + } +} diff --git a/packages/network-cli/src/index.ts b/packages/network-cli/src/index.ts new file mode 100644 index 000000000..ad80474c0 --- /dev/null +++ b/packages/network-cli/src/index.ts @@ -0,0 +1,3 @@ +// created from 'create-ts-index' + +export * from './utils'; diff --git a/packages/network-cli/src/utils/InitService.ts b/packages/network-cli/src/utils/InitService.ts new file mode 100644 index 000000000..791a3f7f0 --- /dev/null +++ b/packages/network-cli/src/utils/InitService.ts @@ -0,0 +1,677 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { existsSync } from 'fs'; +import { prompt } from 'inquirer'; +import { join } from 'path'; +import { BootstrapUtils, ConfigLoader, CustomPreset, Logger, LoggerFactory, LogType, NemesisPreset, Preset } from 'symbol-bootstrap-core'; +import { + AwsNodeData, + AwsNodeSize, + DeploymentType, + Network, + NetworkConfigurationService, + NetworkInputFile, + NetworkUtils, + NodeMetadataType, + nodesAwsMetadata, + nodesMetadata, + NodeTypeInput, + Region, + toDescription, + toNetworkType, +} from 'symbol-network-core'; +import { Account, NetworkType } from 'symbol-sdk'; +import { NetworkCommandUtils } from './'; + +export interface InitServiceParams { + readonly ready: boolean; + readonly showPrivateKeys: boolean; + readonly password?: string; + readonly noPassword: boolean; + readonly additionalNetworkPreset?: CustomPreset; //FOR TEST! +} + +export class InitService { + constructor(private readonly logger: Logger, private readonly workingDir: string, private readonly params: InitServiceParams) {} + async execute(): Promise { + const networkInputFile = NetworkUtils.NETWORK_INPUT_FILE; + const customNetworkPresetFile = NetworkUtils.NETWORK_PRESET_FILE; + const logger = LoggerFactory.getLogger(LogType.Console); + + console.log(); + console.log(`Welcome to the ${NetworkCommandUtils.CLI_TOOL} tool. `); + console.log(); + console.log('This tool will allow you creating a new network or a node cluster for an existing network.'); + + console.log(); + console.log('First you need to decide if you are creating a new network or creating nodes to join an existing network.'); + console.log(); + + const isNewNetwork = await this.confirm('Are you creating a new network?'); + if (isNewNetwork) { + console.log(); + console.log( + 'The new network will be based on an existing network. You can select an out-of-the box preset from Symbol Bootstrap or you can provide a custom network preset to be based one', + ); + console.log(); + } else { + console.log(); + console.log('The new nodes can join an existing public network or you can provide the custom network`s preset and seed.'); + console.log(); + } + + const { preset, nemesisSeedFolder } = await this.promptPreset(isNewNetwork); + + const domain = await this.promptDomain('Domain', 'Enter the domain to be used to be used in your nodes', 'mycompany.com'); + + const suffix = await this.promptName('Suffix', `Enter a suffix for node generated domain names and urls`, 'myc'); + + const networkPreset = ConfigLoader.loadNetworkPreset(preset, this.workingDir); + const nemesisPreset = networkPreset.nemesis as NemesisPreset; + if (!nemesisPreset) throw new Error('Network nemesis must be found!'); + if (!nemesisPreset.mosaics) throw new Error(`Network nemesis's mosaics must be found!`); + + let faucetBalances: number[] | undefined; + if (isNewNetwork) { + const keyStore = await NetworkCommandUtils.createStore(this.params, logger, false, this.workingDir); + const network = await this.promptNetwork("What's the network type you want to create?", Network.privateTest); + const networkType = await toNetworkType(network); + const networkDescription = await this.promptDescription( + 'Network Name', + `Enter a name for the network.`, + `My Company ${toDescription(network)} Network`, + ); + + const nemesisGenerationHashSeed = await this.generateRandomKey( + 'Generation Hash Seed', + 'Enter the generation hash seed to identify the network', + networkType, + ); + + const epochAdjustment = await this.promptNumber( + 'Epoch Adjustment', + 'Enter the epoch adjustment value to offset deadlines.', + Math.floor(Date.now() / 1000), + ); + + networkPreset.baseNamespace = await this.promptName( + 'Network basename Alias', + 'Enter the basename for the network aliases', + networkPreset.baseNamespace, + ); + + for (const [index, mosaic] of nemesisPreset.mosaics.entries()) { + const currencyType = index == 0 ? 'Network' : index == 1 ? 'Harvest' : 'Custom'; + mosaic.name = await this.promptName( + `${currencyType} Currency Name`, + `Enter the alias for the ${currencyType} Currency`, + mosaic.name, + ); + } + + const nemesisSignerAccount = await this.promptPrivateKey(networkType, 'Nemesis Signer Account'); + await keyStore.saveNetworkAccount(networkType, 'nemesisSigner', nemesisSignerAccount.privateKey); + + const founderAccount = await this.promptPrivateKey(networkType, 'Founder Account'); + await keyStore.saveNetworkAccount(networkType, 'founder', founderAccount.privateKey); + faucetBalances = []; + if (await this.confirm('Do you want to have a Faucet account?')) { + const faucetAccount = await this.promptPrivateKey(networkType, 'Faucet Account'); + await keyStore.saveNetworkAccount(networkType, 'faucet', faucetAccount.privateKey); + + for (const mosaic of nemesisPreset.mosaics) { + const balance = await this.promptNumber( + 'Balance', + `What's the initial ${mosaic.name} balance for the Faucet Account ${faucetAccount.address.plain()}?`, + Math.floor(mosaic.supply / 100 / Math.pow(10, mosaic.divisibility)) * 5, + ); + faucetBalances.push(balance); + } + } + + const harvestNetworkFeeSinkAccount = await this.promptPrivateKey(networkType, 'Harvest Network Fee Sink Account'); + await keyStore.saveNetworkAccount(networkType, 'harvestNetworkFeeSink', harvestNetworkFeeSinkAccount.privateKey); + + const namespaceRentalFeeSinkAccount = await this.promptPrivateKey(networkType, 'Namespace Rental Fee Sink Account'); + await keyStore.saveNetworkAccount(networkType, 'namespaceRentalFeeSink', namespaceRentalFeeSinkAccount.privateKey); + + const mosaicRentalFeeSinkAccount = await this.promptPrivateKey(networkType, 'Mosaic Rental Fee Sink Account'); + await keyStore.saveNetworkAccount(networkType, 'mosaicRentalFeeSink', mosaicRentalFeeSinkAccount.privateKey); + + const rewardProgramControllerApiUrl = (await this.confirm('Do you want to host the node Reward Program?')) + ? await this.promptUrl( + 'Reward Controller URL', + 'Enter the full url of the Reward Controller', + `http://${suffix}-node-monitoring.${domain}:7890`, + ) + : undefined; + + if (rewardProgramControllerApiUrl) { + const rewardProgramEnrollmentAccount = await this.promptPrivateKey(networkType, 'Reward Program Enrollment Account'); + await keyStore.saveNetworkAccount(networkType, 'rewardProgramEnrollment', rewardProgramEnrollmentAccount.privateKey); + } + + await NetworkConfigurationService.updateNetworkPreset( + { + networkDescription, + networkType, + nemesisGenerationHashSeed, + epochAdjustment, + rewardProgramControllerApiUrl, + }, + keyStore, + networkPreset, + ); + await BootstrapUtils.writeYaml( + join(this.workingDir, customNetworkPresetFile), + new ConfigLoader(logger).mergePresets(networkPreset, this.params.additionalNetworkPreset), + undefined, + ); + console.log(); + console.log( + `The initial network preset ${customNetworkPresetFile} for the new network has been stored. This file will be updated in the following steps.`, + ); + console.log(); + } + + const nemesisGenerationHashSeed = networkPreset.nemesisGenerationHashSeed; + const epochAdjustment = networkPreset.epochAdjustment?.replace('s', ''); + const deploymentType = await this.promptDeploymentType(); + const nodeTypes = await this.promptNodeTypeInputList(nemesisPreset, deploymentType); + const networkType = networkPreset.networkType; + const networkDescription = networkPreset.networkDescription; + if (!networkType) { + throw new Error('networkType must be resolved!'); + } + if (!epochAdjustment) { + throw new Error('epochAdjustment must be resolved!'); + } + if (!nemesisGenerationHashSeed) { + throw new Error('nemesisGenerationHashSeed must be resolved!'); + } + if (!networkDescription) { + throw new Error('networkDescription must be resolved!'); + } + const networkInput: NetworkInputFile = { + preset: isNewNetwork ? customNetworkPresetFile : preset, + domain: domain, + suffix: suffix, + networkDescription: networkDescription, + networkType: networkType, + nemesisGenerationHashSeed: nemesisGenerationHashSeed, + epochAdjustment: parseInt(epochAdjustment), + rewardProgramControllerApiUrl: networkPreset.rewardProgramControllerApiUrl, + isNewNetwork: isNewNetwork, + deploymentData: { + type: deploymentType, + }, + faucetBalances: faucetBalances, + nemesisSeedFolder: nemesisSeedFolder, + nodeTypes: nodeTypes, + }; + + await NetworkUtils.saveNetworkInput(this.workingDir, networkInput); + console.log(); + console.log(`You have created the initial ${networkInputFile}. Have a look and once once you are happy, run: `); + console.log(); + console.log(`$ ${NetworkCommandUtils.CLI_TOOL} expandNodes`); + console.log(); + } + + public async confirm(question: string, defaultValue = true): Promise { + const { value } = await prompt([ + { + name: 'value', + message: question, + type: 'confirm', + default: defaultValue, + }, + ]); + return value; + } + + public async promptPreset(isNewNetwork: boolean): Promise<{ preset: string; nemesisSeedFolder?: string }> { + const message = isNewNetwork + ? 'Select the Bootstrap profile to base your new network from:' + : 'Select the Bootstrap profile for your nodes:'; + let preset: string = Preset.mainnet; + let customFile = NetworkUtils.NETWORK_PRESET_FILE; + let nemesisSeedFolder = 'nemesis-seed'; + while (true) { + const choices = (isNewNetwork ? Object.values(Preset) : [Preset.testnet, Preset.mainnet]).map((e) => { + return { + name: `${NetworkUtils.startCase(e)} Preset`, + value: e.toString(), + }; + }); + choices.push({ + name: `Custom Preset (${customFile} file will be asked)`, + value: 'custom', + }); + const networkResponse = await prompt([ + { + name: 'value', + message: message, + type: 'list', + default: preset, + choices: choices, + }, + ]); + preset = networkResponse.value; + if (preset === 'custom') { + const customPresetResponse = await prompt([ + { + name: 'value', + message: "Enter the filename of the the custom network's preset:", + default: customFile, + validate(input: string): boolean | string { + if (!BootstrapUtils.isYmlFile(input)) { + return 'is not a YAML file'; + } + return true; + }, + type: 'input', + }, + ]); + + customFile = customPresetResponse.value; + if (!existsSync(customFile)) { + console.log(); + console.log(`Network file '${customFile}' does not exist! Please re-enter`); + console.log(); + continue; + } + if (isNewNetwork) { + return { preset: customFile }; + } + const nemesisSeedFolderResponse = await prompt([ + { + name: 'value', + message: 'Enter the folder name where the custom network seed can be found:', + default: nemesisSeedFolder, + type: 'input', + }, + ]); + nemesisSeedFolder = nemesisSeedFolderResponse.value; + try { + await BootstrapUtils.validateSeedFolder(nemesisSeedFolder, ''); + } catch (e) { + console.log(); + console.log(`Network nemesis seed '${nemesisSeedFolder}' is not valid! Please re-enter: Error: ${e.message}`); + console.log(); + continue; + } + return { + preset: customFile, + nemesisSeedFolder: nemesisSeedFolder, + }; + } + return { preset: preset }; + } + } + + public async promptNetwork(message: string, defaultNetwork: Network): Promise { + const responses = await prompt([ + { + name: 'network', + message: message, + type: 'list', + default: defaultNetwork, + choices: Object.values(Network).map((e) => { + return { + name: toDescription(e), + value: e, + }; + }), + }, + ]); + return responses.network; + } + + public async promptDeploymentType(): Promise { + const responses = await prompt([ + { + name: 'deploymentType', + message: 'Select the cloud provided for the deployment', + type: 'list', + default: DeploymentType.CUSTOM, + choices: Object.values(DeploymentType).map((e) => { + return { + name: e, + value: e, + }; + }), + }, + ]); + return responses.deploymentType; + } + + public async promptAwsRegion(message: string): Promise { + const responses = await prompt([ + { + name: 'region', + message, + type: 'list', + default: Region['us-east-1'], + choices: Object.values(Region).map((e) => { + return { + name: e, + value: e, + }; + }), + }, + ]); + return responses.region; + } + + public async promptAwsNodeSize(message: string, defaultNodeSize: AwsNodeSize | undefined): Promise { + const responses = await prompt([ + { + name: 'region', + message, + type: 'list', + default: defaultNodeSize, + choices: Object.values(AwsNodeSize).map((e) => { + return { + name: e, + value: e, + }; + }), + }, + ]); + return responses.region; + } + + public async promptNodeTypeInputList(nemesis: NemesisPreset, deploymentType: DeploymentType): Promise { + const list: NodeTypeInput[] = []; + while (true) { + console.log(); + console.log(); + const nodeType = await this.promptNodeType(`Select the node type you want to create`); + const nodeTypeName = nodesMetadata[nodeType].name; + const { total } = await prompt([ + { + name: 'total', + message: `How many nodes of type ${nodeTypeName} do you want to create?`, + type: 'number', + validate: (input) => { + if (!input) { + return 'is required'; + } + if (input < 0) { + return 'number must not be negative'; + } + return true; + }, + default: 3, + }, + ]); + + const balances: number[] = []; + if (!nemesis) { + throw new Error('Nemesis must be resolved!'); + } + for (const [index, mosaic] of nemesis.mosaics.entries()) { + const balance = await this.promptNumber( + 'Balance', + `What's the initial ${mosaic.name} balance for the ${nodeTypeName} nodes?`, + nodesMetadata[nodeType].balances[index], + ); + balances.push(balance); + } + + const nickName = await this.promptName( + `Nodes's Nick Name`, + 'The nick name of the these nodes', + nodesMetadata[nodeType].nickName, + ); + let awsNodeData: Partial | undefined; + if (deploymentType == DeploymentType.AWS) { + const region = await this.promptAwsRegion('Select the region for these nodes'); + const nodeSize = await this.promptAwsNodeSize('The ec2 size for these images', nodesAwsMetadata[nodeType].nodeSize); + + const rootBlockSize = await this.promptNumber( + 'Root Block Size', + 'Enter the AWS ec2 volume size in GB', + nodesAwsMetadata[nodeType].rootBlockSize, + ); + awsNodeData = { + nodeSize, + region, + rootBlockSize, + }; + } + + const { confirmCreate } = await prompt([ + { + default: true, + message: `Do you want to create ${total} nodes of type ${nodeTypeName} each with balance of ${balances.join(', ')}?`, + type: 'confirm', + name: 'confirmCreate', + }, + ]); + if (confirmCreate) { + list.push({ + nickName: nickName, + nodeType: nodeType, + balances: balances, + total: total, + ...awsNodeData, + }); + } + const { confirmCreateMore } = await prompt([ + { + default: true, + message: `Do you want to create more nodes?`, + type: 'confirm', + name: 'confirmCreateMore', + }, + ]); + if (!confirmCreateMore) { + return list; + } + } + } + + public async promptNodeType(message: string): Promise { + const responses = await prompt([ + { + name: 'value', + message: message, + type: 'list', + choices: Object.values(NodeMetadataType).map((e) => { + return { + name: nodesMetadata[e].name, + value: e, + }; + }), + }, + ]); + return responses.value; + } + + public async promptPrivateKey(networkType: NetworkType, fieldName: string): Promise { + const showPrivateKeys = this.params.showPrivateKeys; + return this.confirmedPrompt( + fieldName, + async (currentValue): Promise => { + const { value } = await prompt([ + { + name: 'value', + message: `Enter the 64 HEX private key ${fieldName} (or press enter to accept the auto generated):`, + type: showPrivateKeys ? 'input' : 'password', + mask: showPrivateKeys ? '' : '*', + default: currentValue?.privateKey, + validate: BootstrapUtils.isValidPrivateKey, + }, + ]); + return Account.createFromPrivateKey(value, networkType); + }, + Account.generateNewAccount(networkType), + (enteredAccount) => `address ${enteredAccount.address.plain()} public key ${enteredAccount.publicKey}`, + ); + } + + public async generateRandomKey(fieldName: string, message: string, networkType: NetworkType): Promise { + return this.promptText( + fieldName, + message, + Account.generateNewAccount(networkType).privateKey, + + BootstrapUtils.isValidPrivateKey, + ); + } + public async promptName(fieldName: string, message: string, defaultValue: string | undefined): Promise { + return this.promptText(fieldName, message, defaultValue, this.isValidName); + } + + public async promptDescription(fieldName: string, message: string, defaultValue: string | undefined): Promise { + return this.promptText(fieldName, message, defaultValue, this.isValidDescription); + } + + public async promptDomain(fieldName: string, message: string, defaultValue: string | undefined): Promise { + return this.promptText(fieldName, message, defaultValue, this.isValidDomain); + } + + public async promptNumber(fieldName: string, message: string, defaultValue: number | undefined): Promise { + return this.confirmedPrompt( + fieldName, + async (currentValue) => { + const { value } = await prompt([ + { + name: 'value', + message: message, + type: 'number', + default: currentValue, + validate(input: any): boolean | string { + if (input === undefined) { + return 'is required'; + } + if (input < 0) { + return 'must not be negative'; + } + return true; + }, + }, + ]); + return value; + }, + defaultValue, + ); + } + + public async promptUrl(fieldName: string, message: string, defaultValue: string | undefined): Promise { + return this.promptText(fieldName, message, defaultValue, this.isValidUrl); + } + + public async promptText( + fieldName: string, + message: string, + defaultValue: string | undefined, + + validate?: (input: any) => boolean | string | Promise, + ): Promise { + return this.confirmedPrompt( + fieldName, + async (currentValue) => { + const { value } = await prompt([ + { + name: 'value', + message: message, + type: 'input', + default: currentValue, + validate: validate, + }, + ]); + return value; + }, + defaultValue, + ); + } + + public async confirmedPrompt( + fieldName: string, + valuePrompt: (defaultValue: T | undefined) => Promise, + defaultValue: T | undefined, + toString: (o: T) => string = (o: T) => `${o}`, + ): Promise { + let value = defaultValue; + while (true) { + value = await valuePrompt(value); + if (this.params.ready) { + return value; + } + const { confirm } = await prompt([ + { + default: true, + message: `Is the ${fieldName} ${toString(value)} correct?`, + type: 'confirm', + name: 'confirm', + }, + ]); + if (confirm) { + return value; + } + console.log(`Please re-enter the ${fieldName}.`); + } + } + + public isValidName(input: string): boolean | string { + if (!input) { + return 'Must be provided'; + } + if (input.match(/^[A-Za-z]+$/)) return true; + else { + return `${input} is not a valid name`; + } + } + + public isValidDescription(input: string): boolean | string { + if (!input) { + return 'Must be provided'; + } + if (input.match(/^[a-z\d\-_\s]+$/i)) return true; + else { + return `${input} is not a valid description text`; + } + } + + public isValidDomain(input: string): boolean | string { + const expression = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/; + + if (!input) { + return 'Must be provided'; + } + if (input.match(expression)) return true; + else { + return `${input} is not a valid domain`; + } + } + + public isValidUrl(input: string): boolean | string { + const expression = + /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})/gi; + + if (!input) { + return 'Must be provided'; + } + if (input.match(expression)) return true; + else { + return `${input} is not a valid url`; + } + } +} diff --git a/packages/network-cli/src/utils/NetworkCommandUtils.ts b/packages/network-cli/src/utils/NetworkCommandUtils.ts new file mode 100644 index 000000000..6102174da --- /dev/null +++ b/packages/network-cli/src/utils/NetworkCommandUtils.ts @@ -0,0 +1,120 @@ +import { flags } from '@oclif/command'; +import { IOptionFlag } from '@oclif/command/lib/flags'; +import { IBooleanFlag } from '@oclif/parser/lib/flags'; +import { textSync } from 'figlet'; +import { prompt } from 'inquirer'; +import { Logger } from 'symbol-bootstrap-core'; +import { KeyStore, LazyKeyStore, LocalFileKeyStore } from 'symbol-network-core'; +import { Account } from 'symbol-sdk'; + +export class NetworkCommandUtils { + public static readonly CLI_TOOL = 'symbol-network'; + + public static passwordPromptDefaultMessage = `Enter the password used to encrypt and decrypt the local key store (MASTER PASSWORD).`; + public static nodePasswordPromptDefaultMessage = `Enter the password used to encrypt and decrypt the node's stored data (NODE PASSWORD).`; + + public static helpFlag: IBooleanFlag = flags.help({ char: 'h', description: 'It shows the help of this command.' }); + public static passwordFlag: IOptionFlag = NetworkCommandUtils.getPasswordFlag( + 'password', + `MASTER PASSWORD: A password used to encrypt and decrypt the local key store. This cli prompts for a password by default, can be provided in the command line (--password=XXXX) or disabled in the command line (--noPassword).`, + ); + public static noPasswordFlag: IBooleanFlag = flags.boolean({ + description: 'When provided, the tool will not use a password, so private keys will be stored in plain text. Use with caution.', + default: false, + }); + public static nodePasswordFlag: IOptionFlag = NetworkCommandUtils.getPasswordFlag( + 'nodePassword', + `NODE PASSWORD: A password used to encrypt and decrypt each node configuration (Inside the nodes folder).`, + ); + public static noNodePasswordFlag: IBooleanFlag = flags.boolean({ + description: 'When provided, the tool will not use a password, so private keys will be stored in plain text. Use with caution.', + default: false, + }); + + public static getPasswordFlag(paramName: string, description: string): IOptionFlag { + return flags.string({ + description: description, + parse(input: string): string { + const result = !input || NetworkCommandUtils.isValidPassword(input); + if (result === true) return input; + throw new Error(`--${paramName} is invalid, ${result}`); + }, + }); + } + + public static showBanner(): void { + console.log( + textSync(NetworkCommandUtils.CLI_TOOL, { + horizontalLayout: 'fitted', + }), + ); + } + public static async resolvePassword( + providedPassword: string | undefined, + noPassword: boolean, + message: string, + logger: Logger | undefined, + ): Promise { + if (!providedPassword) { + if (noPassword) { + logger?.warn(`Password has not been provided (--noPassword)! It's recommended to use one for security!`); + return undefined; + } + const responses = await prompt([ + { + name: 'password', + mask: '*', + message: message, + type: 'password', + validate: this.isValidPassword, + }, + ]); + if (responses.password === '' || !responses.password) { + logger?.warn(`Password has not been provided (empty text)! It's recommended to use one for security!`); + return undefined; + } + logger?.info(`Password has been provided`); + return responses.password; + } + logger?.info(`Password has been provided`); + return providedPassword; + } + + public static isValidPassword(input: string | undefined): boolean | string { + if (!input || input === '') { + return true; + } + if (input.length >= 4) return true; + return `Password must have at least 4 characters but got ${input.length}`; + } + + public static async createStore( + flags: { password?: string; noPassword: boolean }, + logger: Logger, + lazy: boolean, + workingDir: string, + ): Promise { + const factory = async () => + new LocalFileKeyStore( + await this.resolvePassword(flags.password, flags.noPassword, this.passwordPromptDefaultMessage, logger), + false, + workingDir, + ); + return lazy ? new LazyKeyStore(factory) : await factory(); + } + + public static async resolveNodePassword( + flags: { nodePassword: string | undefined; noNodePassword: boolean }, + logger: Logger, + ): Promise { + return await this.resolvePassword(flags.nodePassword, flags.noNodePassword, this.nodePasswordPromptDefaultMessage, logger); + } + + static shouldAnnounce = async (): Promise => { + return true; + }; + + public static async cosignersPrompt(): Promise { + throw new Error(`Cannot ask for cosigners yet!!`); + } +} diff --git a/packages/network-cli/src/utils/index.ts b/packages/network-cli/src/utils/index.ts new file mode 100644 index 000000000..ccd132ac4 --- /dev/null +++ b/packages/network-cli/src/utils/index.ts @@ -0,0 +1,4 @@ +// created from 'create-ts-index' + +export * from './InitService'; +export * from './NetworkCommandUtils'; diff --git a/packages/network-cli/test/commands/StdUtils.ts b/packages/network-cli/test/commands/StdUtils.ts new file mode 100644 index 000000000..693c13188 --- /dev/null +++ b/packages/network-cli/test/commands/StdUtils.ts @@ -0,0 +1,45 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { stdin } from 'mock-stdin'; + +export const StdUtils = { + keys: Object.freeze({ + up: '\u001b[A', + down: '\u001b[B', + left: '\u001b[D', + right: '\u001b[C', + }), + in: (responses: string[]): void => { + let k = 0; + + const s = stdin(); + function sendAnswer() { + setTimeout(function () { + const text = responses[k]; + console.log(''); + console.log('Response ' + k + ' ' + escape(text)); + s.send(text); + k += 1; + if (k < responses.length) { + sendAnswer(); + } + }, 60); + } + + sendAnswer(); + }, +}; diff --git a/packages/network-cli/test/commands/help.test.ts b/packages/network-cli/test/commands/help.test.ts new file mode 100644 index 000000000..74df49b6b --- /dev/null +++ b/packages/network-cli/test/commands/help.test.ts @@ -0,0 +1,28 @@ +/* + * Copyright 2020 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { expect, test } from '@oclif/test'; + +describe('help', () => { + test.stdout() + .command('help') + .it('should display the help', (ctx) => { + console.log(ctx.stdout); + expect(ctx.stdout).to.contain('USAGE'); + expect(ctx.stdout).to.contain('COMMANDS'); + expect(ctx.stdout).to.contain('generateNemesis'); + }); +}); diff --git a/packages/network-cli/test/commands/init.test.ts b/packages/network-cli/test/commands/init.test.ts new file mode 100644 index 000000000..463950af1 --- /dev/null +++ b/packages/network-cli/test/commands/init.test.ts @@ -0,0 +1,189 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { expect } from 'chai'; +import { compareSync, Result } from 'dir-compare'; +import { copyFileSync, existsSync, readFileSync } from 'fs'; +import 'mocha'; +import { join } from 'path'; +import { BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { LocalFileKeyStore, NetworkService, NetworkUtils } from 'symbol-network-core'; +import { InitService } from '../../src'; +import { StdUtils } from './StdUtils'; + +const logger = LoggerFactory.getLogger(LogType.Console); + +const toKey = (prefix: string, keySize = 64): string => { + return prefix.padStart(keySize, '0'); +}; + +async function compareDire(expectedTarget: string, target: string) { + if (!existsSync(target)) { + throw new Error(`Target ${target} must exist!!!`); + } + if (!existsSync(expectedTarget)) { + await BootstrapUtils.copyDir(target, expectedTarget); + } + const compareResult: Result = compareSync(target, expectedTarget, { + compareSize: true, + compareContent: true, + skipEmptyDirs: true, + excludeFilter: '*.pem', + }); + const differences = compareResult.diffSet?.filter((s) => s.state != 'equal') || []; + const report = BootstrapUtils.toYaml(differences); + const patch = false; + const differentContents = differences + .filter( + (d) => + d.state == 'distinct' && + (d.reason == 'different-content' || d.reason == 'different-size') && + d.type1 == 'file' && + d.type2 == 'file' && + d.path1 && + d.path2, + ) + .filter((d) => { + const path1 = join(d.path1!, d.name1!); + const path2 = join(d.path2!, d.name2!); + + if (patch) { + copyFileSync(path1, path2); + } + return !path1.endsWith('.dat') && !path1.endsWith('.proof'); + }) + .map((d) => { + console.log(d); + const path1 = join(d.path1!, d.name1!); + const path2 = join(d.path2!, d.name2!); + + const content1 = readFileSync(path1, { encoding: 'utf-8' }); + const content2 = readFileSync(path2, { encoding: 'utf-8' }); + return { ...d, content1, content2 }; + }); + + if (differentContents.length) { + const diff = differentContents.reduce( + (r, d) => { + return { + content1: `${r.content1}${join(d.path1!, d.name1!)}\n\n${d.content1}\n\n\n`, + content2: `${r.content2}${join(d.path2!, d.name2!)}\n\n${d.content2}\n\n\n`, + }; + }, + { + content1: '', + content2: '', + }, + ); + expect(diff.content1, `there are differences between folders!. Report:\n\n${report}`).equals(diff.content2); + } else { + expect(compareResult.differences, `there are differences between folders!. Report:\n\n${report}`).equals(0); + } +} + +describe('Init', () => { + it.skip('network1 init', async () => { + // FAILING IN TRAVIS FOR SOME REASON! + const target = 'target/network1'; + await BootstrapUtils.deleteFolder(logger, target); + await BootstrapUtils.mkdir(target); + + // assembly + StdUtils.in([ + '\n', + '\n', + 'mytest.com\n', + 'testprefix\n', + StdUtils.keys.down, + '\n', + 'My Private Test Network\n', + `${toKey('A')}`, + '\n', + '1626575785\n', + 'pirate\n', + 'gold\n', + `${toKey('B')}`, + '\n', + `${toKey('C')}`, + '\n', + 'Y\n', + `${toKey('D')}`, + '\n', + '\n', + `${toKey('E')}\n`, + `${toKey('F')}\n`, + `${toKey('AA')}\n`, + `N\n`, + `\n`, + // `\n`, + StdUtils.keys.down, + StdUtils.keys.down, + `\n`, + '2', + `\n`, + `\n`, + `\n`, + `\n`, + `Y\n`, + //Second node + StdUtils.keys.down, + StdUtils.keys.down, + StdUtils.keys.down, + StdUtils.keys.down, + StdUtils.keys.down, + `\n`, + '1', + `\n`, + `\n`, + `\n`, + `\n`, + `N\n`, //finish + ]); + + await new InitService(logger, target, { + ready: true, + showPrivateKeys: true, + noPassword: true, + additionalNetworkPreset: { + peersP2PListLimit: 10000, + peersApiListLimit: 10000, + restDeploymentToolVersion: '1.0.8', + restDeploymentToolLastUpdatedDate: '2021-07-05', + }, + }).execute(); + await compareDire('test/expectedTargets/network1-after-init', target); + }); + + it('network1 configure', async () => { + const target = 'target/network1'; + await BootstrapUtils.deleteFolder(logger, target); + await BootstrapUtils.mkdir(target); + + const service = new NetworkService(logger, target); + await BootstrapUtils.copyDir('test/expectedTargets/network1-after-init', target); + copyFileSync('test/expectedTargets/network-1-key-store.yml', join(target, NetworkUtils.KEY_STORE_FILE)); + const keyStore = new LocalFileKeyStore(undefined, true, target); + await service.expandNodes(keyStore); + await service.generateNemesis(keyStore, { regenerate: false, composeUser: '1000:1000' }); + await service.updateNodes(keyStore, { + offline: true, + nodePassword: undefined, + composeUser: '1000:1000', + }); + + await compareDire('test/expectedTargets/network1-end', target); + }); +}); diff --git a/packages/network-cli/test/expectedTargets/network-1-key-store.yml b/packages/network-cli/test/expectedTargets/network-1-key-store.yml new file mode 100644 index 000000000..61ed1c1fb --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network-1-key-store.yml @@ -0,0 +1,86 @@ +nodes: + node-1: + Main: + privateKey: 7B0268B1AFAE199A9FCD860CA07D230099310899EF5168F25764D9778C2BC8ED + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + address: PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ + VRF: + privateKey: F88DFE368E27967CF49EDF971B6045DCCDC748E7B3C3E45AC38D02DD4F3CE82A + publicKey: 0B418BE6994BB99B4A6360CCD31ED32C83C6FB625227B1221A61C9B2C5BCF37C + address: PAOBNGHKCPWZZ4HX5A6YAD4RRZ4FYJGBXAJBSTI + Remote: + privateKey: 2BE1D4BE6DAA63C254C9D232DD901B04B45EC2317428FE0E3D2C000AE2D12C76 + publicKey: A7A9A75969B83AAB175B213C4E41B7A2EC4F6ACA1CBB48084E02A11B867C9B02 + address: PCH66C2TPOMFEHZ2VV36FS5KHPHJCZCN627RMHY + Transport: + privateKey: 274F59831F3E8DDC5203323AA8BC5CC801B9994D4F66D51C04E7D90E86E80144 + publicKey: 4FCF4C53E1B5B83D3471C137CD515B0521570F518D872A2D15CC8261D4F959E2 + address: PBEH7IAD2BL2C77M2VZLMR3TUOHSXN33GNAQVWA + node-2: + Main: + privateKey: D7100D9BEE8E595B451546253471199BD08B20DC5325BA6FB1293377CBD6AB64 + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + address: PBTPFLC4CEMABBIPQ3FEXBTBC7C346M4IDVZUBQ + VRF: + privateKey: 5691E8282EB4515126730C0DDF6AE3CA252006611507B67CB65BA66AA0AF5797 + publicKey: 6DBAF259008F75ECE41EB1EDB70919D211127C681D9BFEAD6080CCC5A460D821 + address: PB343QLIW7J5VMPKDVRFIDW743UEGLRROLR2T7A + Remote: + privateKey: 9C2E609D28364AB1A2EA180B617355E4BE52E5B266CD119EA5018CCB5CD2311C + publicKey: E62E9082B3434D3B7830A450A6FFAAF099B0A8034738C23D0FC609AE8BC59326 + address: PCAAYTZYEKAV7VV5SJCFG5L2AZAJP3HCY6KU2BA + Transport: + privateKey: 511073F671F8FB54D4D29DECA5F9DE5DA06CD5A0B9DE841956B5A122BD86529E + publicKey: 19D38D98E823639C9A4CB4D2F2CC47A73809C75879B7C3E4F5948303ACBAA442 + address: PDSLXRVHILNOYLDKLEPKE73Y4AISZQM55WQLXCY + node-3: + Main: + privateKey: 42C09EE476715ED4E3C9F9AF52213BE21D67E41EFB970A68C5C399E369187EE7 + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + address: PC6AHZ6XNGT4MNWORDHDXFJOCYUU56UBPZ2IEBY + VRF: + privateKey: 72B65B9404C2591E79D6083895BE0DD45F8A9BBD686C1FCF2CBD9F24AFE1E8DD + publicKey: D7B67A71A653068EBF6DE4EA6169D40BF718CD62C47D6BCA32435D4FEEBD7802 + address: PDAZMG7P2CDDCT2DV57OWF45ZFUDNRBYQFHKC7I + Remote: + privateKey: A64BA7C71873EA04D57D8F040FB7BA63B21D17700086D92B1C00CFE7A655AA74 + publicKey: 49F7602F5C0D1C291388FE3F6E7825AD51D4AAD66183BF80A8E3AF2B5E583F07 + address: PDRNWMKM3HLSWS3WVAPET6RKP6BIXI2WUCONMGI + Transport: + privateKey: 6937D0B364A2279EFA0A188C3D064E7DF3CA22B83988ED36B4B69C4F9ACE9B86 + publicKey: 80E9EE3CA7BA127A10C53732874B88E749DF63C2F1CC0581CC9D716CFE5C6444 + address: PCNZERL5W7S6PUDIX5KQYYNI7GDKRIRKM4QCYPI +network: + nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000000B + publicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 + address: PDVKFNRG2VYT6SXCCMJ6NOXAMAYJHLYPWKQ5YTI + founder: + privateKey: 000000000000000000000000000000000000000000000000000000000000000C + publicKey: 1262BC6D5408A3C4E025AA0C15E64F69197CDB38911BE5AD344A949779DF3DA6 + address: PAP4OJJGLUXHIHP7EEZAECZE6BVHOSBG7NT4KBI + faucet: + privateKey: 000000000000000000000000000000000000000000000000000000000000000D + publicKey: 3AB9CC26E2E4142E800D629423642F49708B20F8F4EB368195B84EFC64928A67 + address: PCR5TOVHOY6K2YQ2SJWEFQS5RLQA3LP2GNW2AYI + harvestNetworkFeeSink: + privateKey: 000000000000000000000000000000000000000000000000000000000000000E + publicKey: 9035DD13C4C9EB3D8F71ADF9CFD629ABBCB6849A4D8EC9ED772996AAEAB8FA65 + address: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + namespaceRentalFeeSink: + privateKey: 000000000000000000000000000000000000000000000000000000000000000F + publicKey: 675403043288CC7CD110C6A4A70ECA137B6EBA5BB8CFC008A40CDFB3E453C29E + address: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ + mosaicRentalFeeSink: + privateKey: 00000000000000000000000000000000000000000000000000000000000000AA + publicKey: 71DE3B4E933AA718A6F5C45845EE83AF8000A450F9572D4CF393E681C8144191 + address: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +votingFiles: + node-1-1-360: + publicKey: 5604D972C5400AFE987123555FE82D77ABFDFB87AADB0AB35AD95EC19A28D729 + fileContent: >- + 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 + node-2-1-360: + publicKey: 06FD116F1F0EF27C2946C9683C10129BFE4406441C9E94F5D97224DC12631B60 + fileContent: >- + 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 diff --git a/packages/network-cli/test/expectedTargets/network1-after-init/custom-network-preset.yml b/packages/network-cli/test/expectedTargets/network1-after-init/custom-network-preset.yml new file mode 100644 index 000000000..9923fcb93 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-after-init/custom-network-preset.yml @@ -0,0 +1,487 @@ +networkDescription: My Private Test Network +baseNamespace: pirate +batchVerificationRandomSource: /dev/urandom +harvestBeneficiaryPercentage: 25 +epochAdjustment: 1626575785s +enableRevoteOnBoot: false +maxHarvesterBalance: 50000000000000 +maxMosaicAtomicUnits: 8999999999000000 +minHarvesterBalance: 10000000000 +minVoterBalance: 3000000000000 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +harvestNetworkFeeSinkAddress: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I +namespaceRentalFeeSinkAddress: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +mosaicRentalFeeSinkAddress: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +nemesisSignerPublicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +networkType: 120 +totalChainImportance: 7842928625000000 +initialCurrencyAtomicUnits: 7842928625000000 +importanceGrouping: 720 +votingSetGrouping: 1440 +minVotingKeyLifetime: 112 +maxVotingKeyLifetime: 360 +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +stepDuration: 5m +maxBlockFutureTime: 300ms +maxAccountRestrictionValues: 100 +maxSecretLockDuration: 365d +maxNamespaceDuration: 1825d +minNamespaceDuration: 30d +namespaceGracePeriodDuration: 30d +blockGenerationTargetTime: 30s +defaultDynamicFeeMultiplier: 100 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +mosaicRentalFee: 500000 +throttlingBurst: 80 +throttlingRate: 60 +fileDatabaseBatchSize: 100 +minProofSize: 0 +syncTimeout: 5m +maxChildNamespaces: 100 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +timeSynchronizationMinImportance: 10000000000 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +nemesis: + referenceOnly: true + mosaics: + - + name: gold + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nemesisSeedFolder: nemesis-seed +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' diff --git a/packages/network-cli/test/expectedTargets/network1-after-init/key-store.yml b/packages/network-cli/test/expectedTargets/network1-after-init/key-store.yml new file mode 100644 index 000000000..40b0f7bc5 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-after-init/key-store.yml @@ -0,0 +1,27 @@ +nodes: {} +network: + nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000000B + publicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 + address: PDVKFNRG2VYT6SXCCMJ6NOXAMAYJHLYPWKQ5YTI + founder: + privateKey: 000000000000000000000000000000000000000000000000000000000000000C + publicKey: 1262BC6D5408A3C4E025AA0C15E64F69197CDB38911BE5AD344A949779DF3DA6 + address: PAP4OJJGLUXHIHP7EEZAECZE6BVHOSBG7NT4KBI + faucet: + privateKey: 000000000000000000000000000000000000000000000000000000000000000D + publicKey: 3AB9CC26E2E4142E800D629423642F49708B20F8F4EB368195B84EFC64928A67 + address: PCR5TOVHOY6K2YQ2SJWEFQS5RLQA3LP2GNW2AYI + harvestNetworkFeeSink: + privateKey: 000000000000000000000000000000000000000000000000000000000000000E + publicKey: 9035DD13C4C9EB3D8F71ADF9CFD629ABBCB6849A4D8EC9ED772996AAEAB8FA65 + address: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + namespaceRentalFeeSink: + privateKey: 000000000000000000000000000000000000000000000000000000000000000F + publicKey: 675403043288CC7CD110C6A4A70ECA137B6EBA5BB8CFC008A40CDFB3E453C29E + address: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ + mosaicRentalFeeSink: + privateKey: 00000000000000000000000000000000000000000000000000000000000000AA + publicKey: 71DE3B4E933AA718A6F5C45845EE83AF8000A450F9572D4CF393E681C8144191 + address: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +votingFiles: {} diff --git a/packages/network-cli/test/expectedTargets/network1-after-init/network-input.yml b/packages/network-cli/test/expectedTargets/network1-after-init/network-input.yml new file mode 100644 index 000000000..b2159288e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-after-init/network-input.yml @@ -0,0 +1,25 @@ +preset: custom-network-preset.yml +domain: mytest.com +suffix: testprefix +networkDescription: My Private Test Network +networkType: 120 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment: 1626575785 +isNewNetwork: true +deploymentData: + type: CUSTOM +faucetBalances: + - 392146430 +nodeTypes: + - + nickName: dual + nodeType: VotingDual + balances: + - 3000000 + total: 2 + - + nickName: demo + nodeType: HarvestingDemo + balances: + - 1000000 + total: 1 diff --git a/packages/network-cli/test/expectedTargets/network1-end/custom-network-preset.yml b/packages/network-cli/test/expectedTargets/network1-end/custom-network-preset.yml new file mode 100644 index 000000000..fe3b63ebd --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/custom-network-preset.yml @@ -0,0 +1,518 @@ +networkDescription: My Private Test Network +baseNamespace: pirate +batchVerificationRandomSource: /dev/urandom +harvestBeneficiaryPercentage: 25 +epochAdjustment: 1626575785s +enableRevoteOnBoot: false +maxHarvesterBalance: 50000000000000 +maxMosaicAtomicUnits: 8999999999000000 +minHarvesterBalance: 10000000000 +minVoterBalance: 3000000000000 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +harvestNetworkFeeSinkAddress: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I +namespaceRentalFeeSinkAddress: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +mosaicRentalFeeSinkAddress: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +nemesisSignerPublicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +networkType: 120 +totalChainImportance: 7842928625000000 +initialCurrencyAtomicUnits: 7842928625000000 +importanceGrouping: 720 +votingSetGrouping: 1440 +minVotingKeyLifetime: 112 +maxVotingKeyLifetime: 360 +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +stepDuration: 5m +maxBlockFutureTime: 300ms +maxAccountRestrictionValues: 100 +maxSecretLockDuration: 365d +maxNamespaceDuration: 1825d +minNamespaceDuration: 30d +namespaceGracePeriodDuration: 30d +blockGenerationTargetTime: 30s +defaultDynamicFeeMultiplier: 100 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +mosaicRentalFee: 500000 +throttlingBurst: 80 +throttlingRate: 60 +fileDatabaseBatchSize: 100 +minProofSize: 0 +syncTimeout: 5m +maxChildNamespaces: 100 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +timeSynchronizationMinImportance: 10000000000 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +nemesis: + referenceOnly: true + mosaics: + - + name: gold + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nemesisSeedFolder: nemesis-seed +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +knownRestGateways: + - 'http://testprefix-dual-001.mytest.com:3000' + - 'http://testprefix-dual-002.mytest.com:3000' + - 'http://testprefix-demo-001.mytest.com:3000' +knownPeers: + api-node: + - + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + endpoint: + host: testprefix-dual-001.mytest.com + port: 7900 + metadata: + name: testprefix-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + endpoint: + host: testprefix-dual-002.mytest.com + port: 7900 + metadata: + name: testprefix-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + endpoint: + host: testprefix-demo-001.mytest.com + port: 7900 + metadata: + name: testprefix-demo-001 + roles: 'Api,Peer' + peer-node: [] diff --git a/packages/network-cli/test/expectedTargets/network1-end/key-store.yml b/packages/network-cli/test/expectedTargets/network1-end/key-store.yml new file mode 100644 index 000000000..61ed1c1fb --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/key-store.yml @@ -0,0 +1,86 @@ +nodes: + node-1: + Main: + privateKey: 7B0268B1AFAE199A9FCD860CA07D230099310899EF5168F25764D9778C2BC8ED + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + address: PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ + VRF: + privateKey: F88DFE368E27967CF49EDF971B6045DCCDC748E7B3C3E45AC38D02DD4F3CE82A + publicKey: 0B418BE6994BB99B4A6360CCD31ED32C83C6FB625227B1221A61C9B2C5BCF37C + address: PAOBNGHKCPWZZ4HX5A6YAD4RRZ4FYJGBXAJBSTI + Remote: + privateKey: 2BE1D4BE6DAA63C254C9D232DD901B04B45EC2317428FE0E3D2C000AE2D12C76 + publicKey: A7A9A75969B83AAB175B213C4E41B7A2EC4F6ACA1CBB48084E02A11B867C9B02 + address: PCH66C2TPOMFEHZ2VV36FS5KHPHJCZCN627RMHY + Transport: + privateKey: 274F59831F3E8DDC5203323AA8BC5CC801B9994D4F66D51C04E7D90E86E80144 + publicKey: 4FCF4C53E1B5B83D3471C137CD515B0521570F518D872A2D15CC8261D4F959E2 + address: PBEH7IAD2BL2C77M2VZLMR3TUOHSXN33GNAQVWA + node-2: + Main: + privateKey: D7100D9BEE8E595B451546253471199BD08B20DC5325BA6FB1293377CBD6AB64 + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + address: PBTPFLC4CEMABBIPQ3FEXBTBC7C346M4IDVZUBQ + VRF: + privateKey: 5691E8282EB4515126730C0DDF6AE3CA252006611507B67CB65BA66AA0AF5797 + publicKey: 6DBAF259008F75ECE41EB1EDB70919D211127C681D9BFEAD6080CCC5A460D821 + address: PB343QLIW7J5VMPKDVRFIDW743UEGLRROLR2T7A + Remote: + privateKey: 9C2E609D28364AB1A2EA180B617355E4BE52E5B266CD119EA5018CCB5CD2311C + publicKey: E62E9082B3434D3B7830A450A6FFAAF099B0A8034738C23D0FC609AE8BC59326 + address: PCAAYTZYEKAV7VV5SJCFG5L2AZAJP3HCY6KU2BA + Transport: + privateKey: 511073F671F8FB54D4D29DECA5F9DE5DA06CD5A0B9DE841956B5A122BD86529E + publicKey: 19D38D98E823639C9A4CB4D2F2CC47A73809C75879B7C3E4F5948303ACBAA442 + address: PDSLXRVHILNOYLDKLEPKE73Y4AISZQM55WQLXCY + node-3: + Main: + privateKey: 42C09EE476715ED4E3C9F9AF52213BE21D67E41EFB970A68C5C399E369187EE7 + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + address: PC6AHZ6XNGT4MNWORDHDXFJOCYUU56UBPZ2IEBY + VRF: + privateKey: 72B65B9404C2591E79D6083895BE0DD45F8A9BBD686C1FCF2CBD9F24AFE1E8DD + publicKey: D7B67A71A653068EBF6DE4EA6169D40BF718CD62C47D6BCA32435D4FEEBD7802 + address: PDAZMG7P2CDDCT2DV57OWF45ZFUDNRBYQFHKC7I + Remote: + privateKey: A64BA7C71873EA04D57D8F040FB7BA63B21D17700086D92B1C00CFE7A655AA74 + publicKey: 49F7602F5C0D1C291388FE3F6E7825AD51D4AAD66183BF80A8E3AF2B5E583F07 + address: PDRNWMKM3HLSWS3WVAPET6RKP6BIXI2WUCONMGI + Transport: + privateKey: 6937D0B364A2279EFA0A188C3D064E7DF3CA22B83988ED36B4B69C4F9ACE9B86 + publicKey: 80E9EE3CA7BA127A10C53732874B88E749DF63C2F1CC0581CC9D716CFE5C6444 + address: PCNZERL5W7S6PUDIX5KQYYNI7GDKRIRKM4QCYPI +network: + nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000000B + publicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 + address: PDVKFNRG2VYT6SXCCMJ6NOXAMAYJHLYPWKQ5YTI + founder: + privateKey: 000000000000000000000000000000000000000000000000000000000000000C + publicKey: 1262BC6D5408A3C4E025AA0C15E64F69197CDB38911BE5AD344A949779DF3DA6 + address: PAP4OJJGLUXHIHP7EEZAECZE6BVHOSBG7NT4KBI + faucet: + privateKey: 000000000000000000000000000000000000000000000000000000000000000D + publicKey: 3AB9CC26E2E4142E800D629423642F49708B20F8F4EB368195B84EFC64928A67 + address: PCR5TOVHOY6K2YQ2SJWEFQS5RLQA3LP2GNW2AYI + harvestNetworkFeeSink: + privateKey: 000000000000000000000000000000000000000000000000000000000000000E + publicKey: 9035DD13C4C9EB3D8F71ADF9CFD629ABBCB6849A4D8EC9ED772996AAEAB8FA65 + address: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + namespaceRentalFeeSink: + privateKey: 000000000000000000000000000000000000000000000000000000000000000F + publicKey: 675403043288CC7CD110C6A4A70ECA137B6EBA5BB8CFC008A40CDFB3E453C29E + address: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ + mosaicRentalFeeSink: + privateKey: 00000000000000000000000000000000000000000000000000000000000000AA + publicKey: 71DE3B4E933AA718A6F5C45845EE83AF8000A450F9572D4CF393E681C8144191 + address: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +votingFiles: + node-1-1-360: + publicKey: 5604D972C5400AFE987123555FE82D77ABFDFB87AADB0AB35AD95EC19A28D729 + fileContent: >- + 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 + node-2-1-360: + publicKey: 06FD116F1F0EF27C2946C9683C10129BFE4406441C9E94F5D97224DC12631B60 + fileContent: >- + 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 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/00001.dat b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/00001.dat new file mode 100644 index 000000000..2b710b43c Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/00001.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/00001.proof b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/00001.proof new file mode 100644 index 000000000..f7c5365ed Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/00001.proof differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/00001.stmt b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/00001.stmt new file mode 100644 index 000000000..fbb5e44ff Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/00001.stmt differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/hashes.dat b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/hashes.dat new file mode 100644 index 000000000..ba7a0832b Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/hashes.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/proof.heights.dat b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/00000/proof.heights.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/index.dat b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/proof.index.dat b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/proof.index.dat new file mode 100644 index 000000000..87159da17 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/proof.index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/summary.txt b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/summary.txt new file mode 100644 index 000000000..b41684d8b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 5 + Voting Count: 2 + Voting Balance: 6000000000000 +* + Generation Hash: D43808D5F3FDA9AC541CCB75F00F7077202787C4DA7867BF06AB37B1D7B4EA0C +Transactions Hash: 532DCBAA6DFC0DF8D997B61DD899E6E6399405AC9FC6383082B9800FACE9AD4D + Receipts Hash: 29D0679D001DAD260D91725998750299EE34850E79F96802E02604D39575990F + State Hash: ABAA4C012E97BFAADC4A73083A49C6ECE5C34FBA4706FF1DE8E447665B6C86D9 +--- Components (9) --- + + BF2BA38A71F170717F4E35D6BF7F2865F8F7EB1F9E7B9B5E248C89A3D7ED68C2 + + 3D01A4ABB500C7F4B5C20FCED627B9D207A29A27E45E40A9D128540EDC651C8B + + 68E7709CF7470282A40B1CA255DFED6B9C762F29B77B1DAC3C25A7C058143B75 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/addresses.yml b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/addresses.yml new file mode 100644 index 000000000..1fde0ff18 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/addresses.yml @@ -0,0 +1,42 @@ +version: 2 +networkType: 120 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +nodes: + - + name: node + friendlyName: nemesis-private-node + roles: 'Peer,Api' + main: + privateKey: 7B0268B1AFAE199A9FCD860CA07D230099310899EF5168F25764D9778C2BC8ED + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + address: PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ + transport: + privateKey: 274F59831F3E8DDC5203323AA8BC5CC801B9994D4F66D51C04E7D90E86E80144 + publicKey: 4FCF4C53E1B5B83D3471C137CD515B0521570F518D872A2D15CC8261D4F959E2 + address: PBEH7IAD2BL2C77M2VZLMR3TUOHSXN33GNAQVWA + remote: + privateKey: 2BE1D4BE6DAA63C254C9D232DD901B04B45EC2317428FE0E3D2C000AE2D12C76 + publicKey: A7A9A75969B83AAB175B213C4E41B7A2EC4F6ACA1CBB48084E02A11B867C9B02 + address: PCH66C2TPOMFEHZ2VV36FS5KHPHJCZCN627RMHY + vrf: + privateKey: F88DFE368E27967CF49EDF971B6045DCCDC748E7B3C3E45AC38D02DD4F3CE82A + publicKey: 0B418BE6994BB99B4A6360CCD31ED32C83C6FB625227B1221A61C9B2C5BCF37C + address: PAOBNGHKCPWZZ4HX5A6YAD4RRZ4FYJGBXAJBSTI +nemesisSigner: + privateKey: 000000000000000000000000000000000000000000000000000000000000000B + publicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 + address: PDVKFNRG2VYT6SXCCMJ6NOXAMAYJHLYPWKQ5YTI +mosaics: + - + id: 4DAEC93E2FAD68E2 + name: gold + accounts: + - + publicKey: 1262BC6D5408A3C4E025AA0C15E64F69197CDB38911BE5AD344A949779DF3DA6 + address: PAP4OJJGLUXHIHP7EEZAECZE6BVHOSBG7NT4KBI +faucets: + - + account: + privateKey: 000000000000000000000000000000000000000000000000000000000000000D + publicKey: 3AB9CC26E2E4142E800D629423642F49708B20F8F4EB368195B84EFC64928A67 + address: PCR5TOVHOY6K2YQ2SJWEFQS5RLQA3LP2GNW2AYI diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/docker-compose.yml b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/docker-compose.yml new file mode 100644 index 000000000..d56d55b1d --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/docker-compose.yml @@ -0,0 +1,117 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - nemesis-private-node + hostname: nemesis-private-node + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 + wallet: + container_name: wallet + image: 'symbolplatform/symbol-desktop-wallet:1.0.1' + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '80:80' + restart: 'on-failure:2' + volumes: + - '../wallets/wallet:/usr/share/nginx/html/config:ro' + explorer: + container_name: explorer + image: 'symbolplatform/symbol-explorer:1.1.0-alpha' + entrypoint: ash -c "/bin/ash /symbol-commands/run.sh explorer" + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '90:4000' + restart: 'on-failure:2' + volumes: + - '../explorers/explorer:/symbol-workdir:ro' + - './explorer:/symbol-commands:ro' + faucet: + container_name: faucet + image: 'symbolplatform/symbol-faucet:1.0.1-alpha' + stop_signal: SIGINT + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + NATIVE_CURRENCY_NAME: pirate.gold + FAUCET_PRIVATE_KEY: 000000000000000000000000000000000000000000000000000000000000000D + NATIVE_CURRENCY_ID: 4DAEC93E2FAD68E2 + restart: 'on-failure:2' + ports: + - '100:4000' + depends_on: + - rest-gateway +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/explorer/run.sh b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/mongoDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/server/start.sh b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/explorers/explorer/default.json b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/explorers/explorer/default.json new file mode 100644 index 000000000..db334b1ab --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/explorers/explorer/default.json @@ -0,0 +1,55 @@ +{ + "peersApi": { + "defaultNode": "http://nemesis-private-node:3000", + "nodes": [ + "http://nemesis-private-node:3000", + "http://testprefix-dual-001.mytest.com:3000", + "http://testprefix-dual-002.mytest.com:3000", + "http://testprefix-demo-001.mytest.com:3000" + ] + }, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "pirate.gold", + "mosaicId": "4DAEC93E2FAD68E2", + "divisibility": "6", + "namespaceId": "F95F28D0A03774E5", + "networkIdentifier": 120 + }, + "footer": { + "link": [ + { + "href": "https://nemflash.io/", + "text": "NEM News", + "icon": "IconNewspaper" + }, + { + "href": "https://forum.nem.io/", + "text": "Forum", + "icon": "IconForum" + }, + { + "href": "https://t.me/nemred", + "text": "Telegram", + "icon": "IconTelegram" + }, + { + "href": "https://www.reddit.com/r/nem/", + "text": "Reddit", + "icon": "IconReddit" + }, + { + "href": "https://github.com/nemtech", + "text": "Github", + "icon": "IconGithub" + }, + { + "href": "http://localhost:100/", + "text": "Faucet", + "icon": "IconHomeCurrencyUsd" + } + ] + } +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..f3e133acf --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhR1fKRg40exQTRgUBVi1pZiqhhOfTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzMFoXDTQxMDcxNTExMDQzMFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEA/1oGQIu5D87deIuvZxFY +/0CtfG0/p1nPJJnE3LknYX8wBQYDK2VwA0EALhAT8dBTrWV1W4egzWwRP8F6S5ge +cDZtChUqdVjD8zjtI1vKWpoaH/br4CqwUerh4KDSWbeGuXZAObF/c1v0Dg== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..abe05d47e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAnCpj4osXjOCiz6bAESNBnK+2aDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzMFoXDTIyMDczMDExMDQzMFowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAE/PTFPhtbg9NHHBN81RWwUhVw9RjYcq +LRXMgmHU+VniMAUGAytlcANBAPIzUrzrBSZa517reSCNlGzJLLSSvkn0n2dEvOCA +z2Y5ofi5VcRtpxG6Yfd4Y1FTo31rylU/3+F/Vjy3/1GDkgI= +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..6dc0632c6 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEICdPWYMfPo3cUgMyOqi8XMgBuZlNT2bVHATn2Q6G6AFE +-----END PRIVATE KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..9a7dcc90e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = nemesis-private-node +friendlyName = nemesis-private-node +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/rest.json b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..9bfc358ec --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "private", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/00001.dat b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..2b710b43c Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/00001.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/00001.proof b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..f7c5365ed Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/00001.proof differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/00001.stmt b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..fbb5e44ff Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/hashes.dat b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..ba7a0832b Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/proof.heights.dat b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/index.dat b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/proof.index.dat b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..87159da17 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/proof.index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/summary.txt b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/summary.txt new file mode 100644 index 000000000..b41684d8b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 5 + Voting Count: 2 + Voting Balance: 6000000000000 +* + Generation Hash: D43808D5F3FDA9AC541CCB75F00F7077202787C4DA7867BF06AB37B1D7B4EA0C +Transactions Hash: 532DCBAA6DFC0DF8D997B61DD899E6E6399405AC9FC6383082B9800FACE9AD4D + Receipts Hash: 29D0679D001DAD260D91725998750299EE34850E79F96802E02604D39575990F + State Hash: ABAA4C012E97BFAADC4A73083A49C6ECE5C34FBA4706FF1DE8E447665B6C86D9 +--- Components (9) --- + + BF2BA38A71F170717F4E35D6BF7F2865F8F7EB1F9E7B9B5E248C89A3D7ED68C2 + + 3D01A4ABB500C7F4B5C20FCED627B9D207A29A27E45E40A9D128540EDC651C8B + + 68E7709CF7470282A40B1CA255DFED6B9C762F29B77B1DAC3C25A7C058143B75 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/server-config/block-properties-file.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/server-config/block-properties-file.properties new file mode 100644 index 000000000..8517e4c8b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/server-config/block-properties-file.properties @@ -0,0 +1,47 @@ +[nemesis] + +networkIdentifier = private +nemesisGenerationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +nemesisSignerPrivateKey = 000000000000000000000000000000000000000000000000000000000000000B + +[cpp] + +cppFileHeader = + +[output] + +cppFile = +binDirectory = ./seed + +[transactions] +transactionsDirectory = ./transactions + +[namespaces] + +pirate = true +pirate.gold = true + +[namespace>pirate] + +duration = 0 + +[mosaics] + +pirate:gold = true + +[mosaic>pirate:gold] + +divisibility = 6 +duration = 0 +supply = 7'842'928'625'000'000 +isTransferable = true +isSupplyMutable = false +isRestrictable = false + +[distribution>pirate:gold] +PAP4OJJGLUXHIHP7EEZAECZE6BVHOSBG7NT4KBI = 7'443'782'195'000'000 +PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ = 3'000'000'000'000 +PBTPFLC4CEMABBIPQ3FEXBTBC7C346M4IDVZUBQ = 3'000'000'000'000 +PC6AHZ6XNGT4MNWORDHDXFJOCYUU56UBPZ2IEBY = 1'000'000'000'000 +PCR5TOVHOY6K2YQ2SJWEFQS5RLQA3LP2GNW2AYI = 392'146'430'000'000 + diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/1_VRF_00001.bin b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/1_VRF_00001.bin new file mode 100644 index 000000000..9f4506237 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/1_VRF_00001.bin differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/1_VRF_00002.bin b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/1_VRF_00002.bin new file mode 100644 index 000000000..5c87bda33 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/1_VRF_00002.bin differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/1_VRF_00003.bin b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/1_VRF_00003.bin new file mode 100644 index 000000000..535854e41 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/1_VRF_00003.bin differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/2_Remote_00001.bin b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/2_Remote_00001.bin new file mode 100644 index 000000000..6319d8a06 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/2_Remote_00001.bin differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/2_Remote_00002.bin b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/2_Remote_00002.bin new file mode 100644 index 000000000..c70bc4a95 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/2_Remote_00002.bin differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/2_Remote_00003.bin b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/2_Remote_00003.bin new file mode 100644 index 000000000..5a9ab672e Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/2_Remote_00003.bin differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/3_Voting_00001.bin b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/3_Voting_00001.bin new file mode 100644 index 000000000..0aa81e73c Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/3_Voting_00001.bin differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/3_Voting_00002.bin b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/3_Voting_00002.bin new file mode 100644 index 000000000..3c520940e Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nemesis/transactions/3_Voting_00002.bin differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-database.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-finalization.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..52286375a --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 2BE1D4BE6DAA63C254C9D232DD901B04B45EC2317428FE0E3D2C000AE2D12C76 +harvesterVrfPrivateKey = F88DFE368E27967CF49EDF971B6045DCCDC748E7B3C3E45AC38D02DD4F3CE82A + +enableAutoHarvesting = true +maxUnlockedAccounts = 10 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-inflation.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-messaging.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..9a7dcc90e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = nemesis-private-node +friendlyName = nemesis-private-node +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-pt.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-task.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-timesync.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-user.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/peers-api.json b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..523e2b7ba --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,38 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F", + "endpoint": { + "host": "testprefix-dual-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF", + "endpoint": { + "host": "testprefix-dual-002.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411", + "endpoint": { + "host": "testprefix-demo-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-demo-001", + "roles": "Api,Peer" + } + } + ] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/peers-p2p.json b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/ca.cert.pem b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..f3e133acf --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhR1fKRg40exQTRgUBVi1pZiqhhOfTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzMFoXDTQxMDcxNTExMDQzMFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEA/1oGQIu5D87deIuvZxFY +/0CtfG0/p1nPJJnE3LknYX8wBQYDK2VwA0EALhAT8dBTrWV1W4egzWwRP8F6S5ge +cDZtChUqdVjD8zjtI1vKWpoaH/br4CqwUerh4KDSWbeGuXZAObF/c1v0Dg== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/ca.cnf b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/ca.pubkey.pem b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..6c4475f7d --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEA/1oGQIu5D87deIuvZxFY/0CtfG0/p1nPJJnE3LknYX8= +-----END PUBLIC KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/metadata.yml b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..6f51ddde9 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 4FCF4C53E1B5B83D3471C137CD515B0521570F518D872A2D15CC8261D4F959E2 +mainPublicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.cnf b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..abe05d47e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAnCpj4osXjOCiz6bAESNBnK+2aDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzMFoXDTIyMDczMDExMDQzMFowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAE/PTFPhtbg9NHHBN81RWwUhVw9RjYcq +LRXMgmHU+VniMAUGAytlcANBAPIzUrzrBSZa517reSCNlGzJLLSSvkn0n2dEvOCA +z2Y5ofi5VcRtpxG6Yfd4Y1FTo31rylU/3+F/Vjy3/1GDkgI= +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.csr.pem b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b9f8ae67f --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAE/PTFPhtbg9NHHB +N81RWwUhVw9RjYcqLRXMgmHU+VnioAAwBQYDK2VwA0EACXPS5TGlpnf6F8MYwFqC +7sNRh44JAjlGMZ2Z9wQ17d5AHkkTkprfTQSCYNVuTU3pKFiaxK8sFLywDxUMfWvS +AA== +-----END CERTIFICATE REQUEST----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.full.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..558e97784 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQAnCpj4osXjOCiz6bAESNBnK+2aDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzMFoXDTIyMDczMDExMDQzMFowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAE/PTFPhtbg9NHHBN81RWwUhVw9RjYcq +LRXMgmHU+VniMAUGAytlcANBAPIzUrzrBSZa517reSCNlGzJLLSSvkn0n2dEvOCA +z2Y5ofi5VcRtpxG6Yfd4Y1FTo31rylU/3+F/Vjy3/1GDkgI= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhR1fKRg40exQTRgUBVi1pZiqhhOfTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzMFoXDTQxMDcxNTExMDQzMFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEA/1oGQIu5D87deIuvZxFY +/0CtfG0/p1nPJJnE3LknYX8wBQYDK2VwA0EALhAT8dBTrWV1W4egzWwRP8F6S5ge +cDZtChUqdVjD8zjtI1vKWpoaH/br4CqwUerh4KDSWbeGuXZAObF/c1v0Dg== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.key.pem b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..6dc0632c6 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEICdPWYMfPo3cUgMyOqi8XMgBuZlNT2bVHATn2Q6G6AFE +-----END PRIVATE KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-database.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-finalization.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-harvesting.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..52286375a --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 2BE1D4BE6DAA63C254C9D232DD901B04B45EC2317428FE0E3D2C000AE2D12C76 +harvesterVrfPrivateKey = F88DFE368E27967CF49EDF971B6045DCCDC748E7B3C3E45AC38D02DD4F3CE82A + +enableAutoHarvesting = true +maxUnlockedAccounts = 10 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-inflation.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-logging-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-messaging.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..9a7dcc90e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = nemesis-private-node +friendlyName = nemesis-private-node +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-pt.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-task.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-timesync.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-user.properties b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/peers-api.json b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..523e2b7ba --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,38 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F", + "endpoint": { + "host": "testprefix-dual-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF", + "endpoint": { + "host": "testprefix-dual-002.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411", + "endpoint": { + "host": "testprefix-demo-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-demo-001", + "roles": "Api,Peer" + } + } + ] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/peers-p2p.json b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/preset.yml b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/preset.yml new file mode 100644 index 000000000..349ba4c96 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/preset.yml @@ -0,0 +1,844 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1626575785s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 10 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: My Private Test Network +baseNamespace: pirate +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +harvestNetworkFeeSinkAddress: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I +namespaceRentalFeeSinkAddress: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +mosaicRentalFeeSinkAddress: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +nemesisSignerPublicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +networkType: 120 +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +nemesis: + referenceOnly: true + mosaics: + - + name: gold + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - 1262BC6D5408A3C4E025AA0C15E64F69197CDB38911BE5AD344A949779DF3DA6 + currencyDistributions: + - + address: PAP4OJJGLUXHIHP7EEZAECZE6BVHOSBG7NT4KBI + amount: 7443782195000000 + - + address: PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ + amount: 3000000000000 + - + address: PBTPFLC4CEMABBIPQ3FEXBTBC7C346M4IDVZUBQ + amount: 3000000000000 + - + address: PC6AHZ6XNGT4MNWORDHDXFJOCYUU56UBPZ2IEBY + amount: 1000000000000 + - + address: PCR5TOVHOY6K2YQ2SJWEFQS5RLQA3LP2GNW2AYI + amount: 392146430000000 + transactions: + 1_VRF_00001: >- + A100000000000000FC36338A311D65B38155577C63ED61B8EBB85BAB5D97C96567025259B44C4BEA5D04331267BD8CBEAD1ACF79AE3B693857805DFED2E71D529BDD1F645C953E05FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F0000000001784342000000000000000001000000000000000B418BE6994BB99B4A6360CCD31ED32C83C6FB625227B1221A61C9B2C5BCF37C01 + 2_Remote_00001: >- + A100000000000000DBFB5368A5E81DE7DFBC486CDE07D0603BE5B666EE657EDBEAA182AB9CE9BE4727B9860A80568B127B6D7A1595AD1DDEB6B943949C94A065970B634A181AF80AFF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F0000000001784C4100000000000000000100000000000000A7A9A75969B83AAB175B213C4E41B7A2EC4F6ACA1CBB48084E02A11B867C9B0201 + 3_Voting_00001: >- + A90000000000000045B8790250712E0D703FF1440ABDA9465A4A55EDFA43459D29E12FF1697AAF3B71FBFE441491DE98D230B3BDFD02CAA188A4F69C3BCD14D87E042C0413422E08FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F0000000001784341000000000000000001000000000000005604D972C5400AFE987123555FE82D77ABFDFB87AADB0AB35AD95EC19A28D729010000006801000001 + 1_VRF_00002: >- + A100000000000000AE3C1C69976E75CF5655BACCD296C7877AD179CE5CFAD3844E730DA46A3630A1AFDDDFDFFBD94711AE7BC7C70C0F07BA84D0E61AD2275925E9E83B013BAE180D58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF0000000001784342000000000000000001000000000000006DBAF259008F75ECE41EB1EDB70919D211127C681D9BFEAD6080CCC5A460D82101 + 2_Remote_00002: >- + A10000000000000051334BF6AB6DD889F1A29FA8D69E8B4C11C6AF39B64FE69FDDE3FCBEA51C0F3787C2788FF24023D500FE3CA367E8CE96E20199484A1ED950493B02D70B505E0158F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF0000000001784C4100000000000000000100000000000000E62E9082B3434D3B7830A450A6FFAAF099B0A8034738C23D0FC609AE8BC5932601 + 3_Voting_00002: >- + A900000000000000B3E4B1A998B18AF6BA4FBAAB24741AF4CB1E7E339C0306C454A544E7CB7AFD6CB4D177911B3579265538F74AB0BE2CF1BA21D4E66F243EB12A4ADC5EF90E270058F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF00000000017843410000000000000000010000000000000006FD116F1F0EF27C2946C9683C10129BFE4406441C9E94F5D97224DC12631B60010000006801000001 + 1_VRF_00003: >- + A100000000000000F7FDE9849BCD9931860A6643AFFF07EE2141F61BABA81256D1F3CC9CA60C89AA7F4DDB6F4E9233024E9E0689B4AE181A381AE027C354F369255F6C9E83E75E07E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411000000000178434200000000000000000100000000000000D7B67A71A653068EBF6DE4EA6169D40BF718CD62C47D6BCA32435D4FEEBD780201 + 2_Remote_00003: >- + A100000000000000A8C16A7FAE8696828A140B26A9C9CCE1D394C0504A06E5C78A560CD7A896C19D198A3FB18A57109F217C34BE49763132314366C19535564327197D797216160DE39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B904110000000001784C410000000000000000010000000000000049F7602F5C0D1C291388FE3F6E7825AD51D4AAD66183BF80A8E3AF2B5E583F0701 +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nemesisSeedFolder: '' +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +knownRestGateways: + - 'http://testprefix-dual-001.mytest.com:3000' + - 'http://testprefix-dual-002.mytest.com:3000' + - 'http://testprefix-demo-001.mytest.com:3000' +knownPeers: + api-node: + - + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + endpoint: + host: testprefix-dual-001.mytest.com + port: 7900 + metadata: + name: testprefix-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + endpoint: + host: testprefix-dual-002.mytest.com + port: 7900 + metadata: + name: testprefix-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + endpoint: + host: testprefix-demo-001.mytest.com + port: 7900 + metadata: + name: testprefix-demo-001 + roles: 'Api,Peer' + peer-node: [] +faucetUrl: 'http://localhost:100' +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + host: nemesis-private-node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' + excludeFromNemesis: true + friendlyName: nemesis-private-node +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +wallets: + - + name: wallet + title: Symbol Bootstrap Wallet + openPort: '80' +explorers: + - + name: explorer + openPort: '90' + footer: + link: + - + href: 'https://nemflash.io/' + text: NEM News + icon: IconNewspaper + - + href: 'https://forum.nem.io/' + text: Forum + icon: IconForum + - + href: 'https://t.me/nemred' + text: Telegram + icon: IconTelegram + - + href: 'https://www.reddit.com/r/nem/' + text: Reddit + icon: IconReddit + - + href: 'https://github.com/nemtech' + text: Github + icon: IconGithub + - + href: 'http://localhost:100/' + text: Faucet + icon: IconHomeCurrencyUsd +faucets: + - + name: faucet + gateway: rest-gateway + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + openPort: '100' +version: 1 +preset: custom-network-preset.yml +assembly: demo +customPresetCache: + nemesisSeedFolder: '' + nodes: + - + excludeFromNemesis: true + friendlyName: nemesis-private-node + host: nemesis-private-node + nemesis: + mosaics: + - + accounts: + - 1262BC6D5408A3C4E025AA0C15E64F69197CDB38911BE5AD344A949779DF3DA6 + currencyDistributions: + - + address: PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ + amount: 3000000000000 + - + address: PBTPFLC4CEMABBIPQ3FEXBTBC7C346M4IDVZUBQ + amount: 3000000000000 + - + address: PC6AHZ6XNGT4MNWORDHDXFJOCYUU56UBPZ2IEBY + amount: 1000000000000 + - + address: PCR5TOVHOY6K2YQ2SJWEFQS5RLQA3LP2GNW2AYI + amount: 392146430000000 + transactions: + 1_VRF_00001: >- + A100000000000000FC36338A311D65B38155577C63ED61B8EBB85BAB5D97C96567025259B44C4BEA5D04331267BD8CBEAD1ACF79AE3B693857805DFED2E71D529BDD1F645C953E05FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F0000000001784342000000000000000001000000000000000B418BE6994BB99B4A6360CCD31ED32C83C6FB625227B1221A61C9B2C5BCF37C01 + 2_Remote_00001: >- + A100000000000000DBFB5368A5E81DE7DFBC486CDE07D0603BE5B666EE657EDBEAA182AB9CE9BE4727B9860A80568B127B6D7A1595AD1DDEB6B943949C94A065970B634A181AF80AFF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F0000000001784C4100000000000000000100000000000000A7A9A75969B83AAB175B213C4E41B7A2EC4F6ACA1CBB48084E02A11B867C9B0201 + 3_Voting_00001: >- + A90000000000000045B8790250712E0D703FF1440ABDA9465A4A55EDFA43459D29E12FF1697AAF3B71FBFE441491DE98D230B3BDFD02CAA188A4F69C3BCD14D87E042C0413422E08FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F0000000001784341000000000000000001000000000000005604D972C5400AFE987123555FE82D77ABFDFB87AADB0AB35AD95EC19A28D729010000006801000001 + 1_VRF_00002: >- + A100000000000000AE3C1C69976E75CF5655BACCD296C7877AD179CE5CFAD3844E730DA46A3630A1AFDDDFDFFBD94711AE7BC7C70C0F07BA84D0E61AD2275925E9E83B013BAE180D58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF0000000001784342000000000000000001000000000000006DBAF259008F75ECE41EB1EDB70919D211127C681D9BFEAD6080CCC5A460D82101 + 2_Remote_00002: >- + A10000000000000051334BF6AB6DD889F1A29FA8D69E8B4C11C6AF39B64FE69FDDE3FCBEA51C0F3787C2788FF24023D500FE3CA367E8CE96E20199484A1ED950493B02D70B505E0158F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF0000000001784C4100000000000000000100000000000000E62E9082B3434D3B7830A450A6FFAAF099B0A8034738C23D0FC609AE8BC5932601 + 3_Voting_00002: >- + A900000000000000B3E4B1A998B18AF6BA4FBAAB24741AF4CB1E7E339C0306C454A544E7CB7AFD6CB4D177911B3579265538F74AB0BE2CF1BA21D4E66F243EB12A4ADC5EF90E270058F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF00000000017843410000000000000000010000000000000006FD116F1F0EF27C2946C9683C10129BFE4406441C9E94F5D97224DC12631B60010000006801000001 + 1_VRF_00003: >- + A100000000000000F7FDE9849BCD9931860A6643AFFF07EE2141F61BABA81256D1F3CC9CA60C89AA7F4DDB6F4E9233024E9E0689B4AE181A381AE027C354F369255F6C9E83E75E07E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411000000000178434200000000000000000100000000000000D7B67A71A653068EBF6DE4EA6169D40BF718CD62C47D6BCA32435D4FEEBD780201 + 2_Remote_00003: >- + A100000000000000A8C16A7FAE8696828A140B26A9C9CCE1D394C0504A06E5C78A560CD7A896C19D198A3FB18A57109F217C34BE49763132314366C19535564327197D797216160DE39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B904110000000001784C410000000000000000010000000000000049F7602F5C0D1C291388FE3F6E7825AD51D4AAD66183BF80A8E3AF2B5E583F0701 + faucets: + - + repeat: 1 +networkIdentifier: private +networkName: private +currencyMosaicId: 4DAEC93E2FAD68E2 +harvestingMosaicId: 4DAEC93E2FAD68E2 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/reports/node-config.csv b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/reports/node-config.csv new file mode 100644 index 000000000..9346dc73c --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/reports/node-config.csv @@ -0,0 +1,865 @@ +symbol-bootstrap-version; 1.1.0-alpha.0 + +config-database.properties +database +databaseUri; mongodb://db:27017 +databaseName; catapult +maxWriterThreads; 8 +maxDropBatchSize; 10 +writeTimeout; 10m + +plugins +catapult.mongo.plugins.accountlink; true +catapult.mongo.plugins.aggregate; true +catapult.mongo.plugins.lockhash; true +catapult.mongo.plugins.locksecret; true +catapult.mongo.plugins.metadata; true +catapult.mongo.plugins.mosaic; true +catapult.mongo.plugins.multisig; true +catapult.mongo.plugins.namespace; true +catapult.mongo.plugins.restrictionaccount; true +catapult.mongo.plugins.restrictionmosaic; true +catapult.mongo.plugins.transfer; true + + +config-extensions-broker.properties +extensions +extension.addressextraction; true +extension.mongo; true +extension.zeromq; true +extension.hashcache; true + + +config-extensions-recovery.properties +extensions +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.filespooling; true +extension.hashcache; true + + +config-extensions-server.properties +extensions +extension.filespooling; true +extension.partialtransaction; true +extension.addressextraction; false +extension.mongo; false +extension.zeromq; false +extension.harvesting; true +extension.syncsource; true +extension.diagnostics; true +extension.finalization; true +extension.hashcache; true +extension.networkheight; false +extension.nodediscovery; true +extension.packetserver; true +extension.pluginhandlers; true +extension.sync; true +extension.timesync; true +extension.transactionsink; true +extension.unbondedpruning; true + + +config-finalization.properties +finalization +enableVoting; false +enableRevoteOnBoot; false +size; 10'000 +threshold; 7'000 +stepDuration; 5m +shortLivedCacheMessageDuration; 10m +messageSynchronizationMaxResponseSize; 20MB +maxHashesPerPoint; 256 +prevoteBlocksMultiple; 4 +unfinalizedBlocksDuration; 10m + + +config-harvesting.properties +harvesting +harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. +harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. +enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. +maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. +delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. +beneficiaryAddress; PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ; Address; Address of the account receiving part of the harvested fee. + + +config-inflation.properties +inflation +starting-at-height-2; 0 +starting-at-height-5760; 191997042 +starting-at-height-172799; 183764522 +starting-at-height-435299; 175884998 +starting-at-height-697799; 168343336 +starting-at-height-960299; 161125048 +starting-at-height-1222799; 154216270 +starting-at-height-1485299; 147603728 +starting-at-height-1747799; 141274720 +starting-at-height-2010299; 135217090 +starting-at-height-2272799; 129419202 +starting-at-height-2535299; 123869918 +starting-at-height-2797799; 118558578 +starting-at-height-3060299; 113474978 +starting-at-height-3322799; 108609356 +starting-at-height-3585299; 103952364 +starting-at-height-3847799; 99495056 +starting-at-height-4110299; 95228870 +starting-at-height-4372799; 91145612 +starting-at-height-4635299; 87237436 +starting-at-height-4897799; 83496838 +starting-at-height-5160299; 79916630 +starting-at-height-5422799; 76489934 +starting-at-height-5685299; 73210170 +starting-at-height-5947799; 70071038 +starting-at-height-6210299; 67066506 +starting-at-height-6472799; 64190804 +starting-at-height-6735299; 61438406 +starting-at-height-6997799; 58804028 +starting-at-height-7260299; 56282608 +starting-at-height-7522799; 53869300 +starting-at-height-7785299; 51559472 +starting-at-height-8047799; 49348686 +starting-at-height-8310299; 47232696 +starting-at-height-8572799; 45207434 +starting-at-height-8835299; 43269014 +starting-at-height-9097799; 41413708 +starting-at-height-9360299; 39637956 +starting-at-height-9622799; 37938346 +starting-at-height-9885299; 36311610 +starting-at-height-10147799; 34754628 +starting-at-height-10410299; 33264406 +starting-at-height-10672799; 31838082 +starting-at-height-10935299; 30472918 +starting-at-height-11197799; 29166288 +starting-at-height-11460299; 27915686 +starting-at-height-11722799; 26718706 +starting-at-height-11985299; 25573052 +starting-at-height-12247799; 24476520 +starting-at-height-12510299; 23427008 +starting-at-height-12772799; 22422496 +starting-at-height-13035299; 21461056 +starting-at-height-13297799; 20540840 +starting-at-height-13560299; 19660082 +starting-at-height-13822799; 18817090 +starting-at-height-14085299; 18010244 +starting-at-height-14347799; 17237994 +starting-at-height-14610299; 16498858 +starting-at-height-14872799; 15791412 +starting-at-height-15135299; 15114302 +starting-at-height-15397799; 14466226 +starting-at-height-15660299; 13845938 +starting-at-height-15922799; 13252246 +starting-at-height-16185299; 12684012 +starting-at-height-16447799; 12140142 +starting-at-height-16710299; 11619592 +starting-at-height-16972799; 11121364 +starting-at-height-17235299; 10644498 +starting-at-height-17497799; 10188078 +starting-at-height-17760299; 9751230 +starting-at-height-18022799; 9333114 +starting-at-height-18285299; 8932924 +starting-at-height-18547799; 8549896 +starting-at-height-18810299; 8183290 +starting-at-height-19072799; 7832404 +starting-at-height-19335299; 7496562 +starting-at-height-19597799; 7175122 +starting-at-height-19860299; 6867464 +starting-at-height-20122799; 6573000 +starting-at-height-20385299; 6291160 +starting-at-height-20647799; 6021404 +starting-at-height-20910299; 5763216 +starting-at-height-21172799; 5516100 +starting-at-height-21435299; 5279578 +starting-at-height-21697799; 5053198 +starting-at-height-21960299; 4836526 +starting-at-height-22222799; 4629144 +starting-at-height-22485299; 4430652 +starting-at-height-22747799; 4240674 +starting-at-height-23010299; 4058840 +starting-at-height-23272799; 3884804 +starting-at-height-23535299; 3718230 +starting-at-height-23797799; 3558798 +starting-at-height-24060299; 3406202 +starting-at-height-24322799; 3260150 +starting-at-height-24585299; 3120360 +starting-at-height-24847799; 2986564 +starting-at-height-25110299; 2858506 +starting-at-height-25372799; 2735938 +starting-at-height-25635299; 2618624 +starting-at-height-25897799; 2506342 +starting-at-height-26160299; 2398874 +starting-at-height-26422799; 2296014 +starting-at-height-26685299; 2197564 +starting-at-height-26947799; 2103336 +starting-at-height-27210299; 2013150 +starting-at-height-27472799; 1926828 +starting-at-height-27735299; 1844210 +starting-at-height-27997799; 1765132 +starting-at-height-28260299; 1689446 +starting-at-height-28522799; 1617006 +starting-at-height-28785299; 1547672 +starting-at-height-29047799; 1481310 +starting-at-height-29310299; 1417794 +starting-at-height-29572799; 1357000 +starting-at-height-29835299; 1298814 +starting-at-height-30097799; 1243124 +starting-at-height-30360299; 1189820 +starting-at-height-30622799; 1138802 +starting-at-height-30885299; 1089972 +starting-at-height-31147799; 1043236 +starting-at-height-31410299; 998504 +starting-at-height-31672799; 955690 +starting-at-height-31935299; 914712 +starting-at-height-32197799; 875490 +starting-at-height-32460299; 837950 +starting-at-height-32722799; 802020 +starting-at-height-32985299; 767630 +starting-at-height-33247799; 734716 +starting-at-height-33510299; 703212 +starting-at-height-33772799; 673060 +starting-at-height-34035299; 644200 +starting-at-height-34297799; 616578 +starting-at-height-34560299; 590140 +starting-at-height-34822799; 564836 +starting-at-height-35085299; 540616 +starting-at-height-35347799; 517436 +starting-at-height-35610299; 495248 +starting-at-height-35872799; 474014 +starting-at-height-36135299; 453688 +starting-at-height-36397799; 434234 +starting-at-height-36660299; 415616 +starting-at-height-36922799; 397794 +starting-at-height-37185299; 380738 +starting-at-height-37447799; 364412 +starting-at-height-37710299; 348786 +starting-at-height-37972799; 333832 +starting-at-height-38235299; 319518 +starting-at-height-38497799; 305816 +starting-at-height-38760299; 292704 +starting-at-height-39022799; 280154 +starting-at-height-39285299; 268140 +starting-at-height-39547799; 256644 +starting-at-height-39810299; 245638 +starting-at-height-40072799; 235106 +starting-at-height-40335299; 225026 +starting-at-height-40597799; 215376 +starting-at-height-40860299; 206142 +starting-at-height-41122799; 197302 +starting-at-height-41385299; 188842 +starting-at-height-41647799; 180744 +starting-at-height-41910299; 172994 +starting-at-height-42172799; 165578 +starting-at-height-42435299; 158478 +starting-at-height-42697799; 151682 +starting-at-height-42960299; 145178 +starting-at-height-43222799; 138954 +starting-at-height-43485299; 132994 +starting-at-height-43747799; 127292 +starting-at-height-44010299; 121834 +starting-at-height-44272799; 116610 +starting-at-height-44535299; 111610 +starting-at-height-44797799; 106824 +starting-at-height-45060299; 102244 +starting-at-height-45322799; 97860 +starting-at-height-45585299; 93664 +starting-at-height-45847799; 89648 +starting-at-height-46110299; 85804 +starting-at-height-46372799; 82124 +starting-at-height-46635299; 78602 +starting-at-height-46897799; 75232 +starting-at-height-47160299; 72006 +starting-at-height-47422799; 68920 +starting-at-height-47685299; 65964 +starting-at-height-47947799; 63136 +starting-at-height-48210299; 60428 +starting-at-height-48472799; 57838 +starting-at-height-48735299; 55358 +starting-at-height-48997799; 52984 +starting-at-height-49260299; 50712 +starting-at-height-49522799; 48538 +starting-at-height-49785299; 46456 +starting-at-height-50047799; 44464 +starting-at-height-50310299; 42558 +starting-at-height-50572799; 40732 +starting-at-height-50835299; 38986 +starting-at-height-51097799; 37314 +starting-at-height-51360299; 35714 +starting-at-height-51622799; 34182 +starting-at-height-51885299; 32716 +starting-at-height-52147799; 31314 +starting-at-height-52410299; 29972 +starting-at-height-52672799; 28686 +starting-at-height-52935299; 27456 +starting-at-height-53197799; 26278 +starting-at-height-53460299; 25152 +starting-at-height-53722799; 24074 +starting-at-height-53985299; 23042 +starting-at-height-54247799; 22054 +starting-at-height-54510299; 21108 +starting-at-height-54772799; 20202 +starting-at-height-55035299; 19336 +starting-at-height-55297799; 18506 +starting-at-height-55560299; 17714 +starting-at-height-55822799; 16954 +starting-at-height-56085299; 16226 +starting-at-height-56347799; 15532 +starting-at-height-56610299; 14866 +starting-at-height-56872799; 14228 +starting-at-height-57135299; 13618 +starting-at-height-57397799; 13034 +starting-at-height-57660299; 12474 +starting-at-height-57922799; 11940 +starting-at-height-58185299; 11428 +starting-at-height-58447799; 10938 +starting-at-height-58710299; 10468 +starting-at-height-58972799; 10020 +starting-at-height-59235299; 9590 +starting-at-height-59497799; 9178 +starting-at-height-59760299; 8786 +starting-at-height-60022799; 8408 +starting-at-height-60285299; 8048 +starting-at-height-60547799; 7702 +starting-at-height-60810299; 7372 +starting-at-height-61072799; 7056 +starting-at-height-61335299; 6754 +starting-at-height-61597799; 6464 +starting-at-height-61860299; 6186 +starting-at-height-62122799; 5922 +starting-at-height-62385299; 5668 +starting-at-height-62647799; 5424 +starting-at-height-62910299; 5192 +starting-at-height-63172799; 4970 +starting-at-height-63435299; 4756 +starting-at-height-63697799; 4552 +starting-at-height-63960299; 4356 +starting-at-height-64222799; 4170 +starting-at-height-64485299; 3992 +starting-at-height-64747799; 3820 +starting-at-height-65010299; 3656 +starting-at-height-65272799; 3500 +starting-at-height-65535299; 3350 +starting-at-height-65797799; 3206 +starting-at-height-66060299; 3068 +starting-at-height-66322799; 2936 +starting-at-height-66585299; 2810 +starting-at-height-66847799; 2690 +starting-at-height-67110299; 2574 +starting-at-height-67372799; 2464 +starting-at-height-67635299; 2358 +starting-at-height-67897799; 2258 +starting-at-height-68160299; 2160 +starting-at-height-68422799; 2068 +starting-at-height-68685299; 1980 +starting-at-height-68947799; 1894 +starting-at-height-69210299; 1812 +starting-at-height-69472799; 1736 +starting-at-height-69735299; 1660 +starting-at-height-69997799; 1590 +starting-at-height-70260299; 1522 +starting-at-height-70522799; 1456 +starting-at-height-70785299; 1394 +starting-at-height-71047799; 1334 +starting-at-height-71310299; 1276 +starting-at-height-71572799; 1222 +starting-at-height-71835299; 1170 +starting-at-height-72097799; 1120 +starting-at-height-72360299; 1072 +starting-at-height-72622799; 1026 +starting-at-height-72885299; 982 +starting-at-height-73147799; 938 +starting-at-height-73410299; 898 +starting-at-height-73672799; 860 +starting-at-height-73935299; 824 +starting-at-height-74197799; 788 +starting-at-height-74460299; 754 +starting-at-height-74722799; 722 +starting-at-height-74985299; 690 +starting-at-height-75247799; 662 +starting-at-height-75510299; 632 +starting-at-height-75772799; 606 +starting-at-height-76035299; 580 +starting-at-height-76297799; 554 +starting-at-height-76560299; 530 +starting-at-height-76822799; 508 +starting-at-height-77085299; 486 +starting-at-height-77347799; 466 +starting-at-height-77610299; 446 +starting-at-height-77872799; 426 +starting-at-height-78135299; 408 +starting-at-height-78397799; 390 +starting-at-height-78660299; 374 +starting-at-height-78922799; 358 +starting-at-height-79185299; 342 +starting-at-height-79447799; 328 +starting-at-height-79710299; 314 +starting-at-height-79972799; 300 +starting-at-height-80235299; 286 +starting-at-height-80497799; 274 +starting-at-height-80760299; 262 +starting-at-height-81022799; 252 +starting-at-height-81285299; 240 +starting-at-height-81547799; 230 +starting-at-height-81810299; 220 +starting-at-height-82072799; 210 +starting-at-height-82335299; 202 +starting-at-height-82597799; 194 +starting-at-height-82860299; 184 +starting-at-height-83122799; 176 +starting-at-height-83385299; 170 +starting-at-height-83647799; 162 +starting-at-height-83910299; 154 +starting-at-height-84172799; 148 +starting-at-height-84435299; 142 +starting-at-height-84697799; 136 +starting-at-height-84960299; 130 +starting-at-height-85222799; 124 +starting-at-height-85485299; 118 +starting-at-height-85747799; 114 +starting-at-height-86010299; 108 +starting-at-height-86272799; 104 +starting-at-height-86535299; 100 +starting-at-height-86797799; 96 +starting-at-height-87060299; 92 +starting-at-height-87322799; 88 +starting-at-height-87585299; 84 +starting-at-height-87847799; 80 +starting-at-height-88110299; 76 +starting-at-height-88372799; 72 +starting-at-height-88635299; 70 +starting-at-height-88897799; 66 +starting-at-height-89160299; 64 +starting-at-height-89422799; 62 +starting-at-height-89685299; 58 +starting-at-height-89947799; 56 +starting-at-height-90210299; 54 +starting-at-height-90472799; 52 +starting-at-height-90735299; 48 +starting-at-height-90997799; 46 +starting-at-height-91260299; 44 +starting-at-height-91522799; 42 +starting-at-height-91785299; 40 +starting-at-height-92047799; 40 +starting-at-height-92310299; 38 +starting-at-height-92572799; 36 +starting-at-height-92835299; 34 +starting-at-height-93097799; 32 +starting-at-height-93360299; 32 +starting-at-height-93622799; 30 +starting-at-height-93885299; 28 +starting-at-height-94147799; 28 +starting-at-height-94410299; 26 +starting-at-height-94672799; 24 +starting-at-height-94935299; 24 +starting-at-height-95197799; 22 +starting-at-height-95460299; 22 +starting-at-height-95722799; 20 +starting-at-height-95985299; 20 +starting-at-height-96247799; 18 +starting-at-height-96510299; 18 +starting-at-height-96772799; 18 +starting-at-height-97035299; 16 +starting-at-height-97297799; 16 +starting-at-height-97560299; 14 +starting-at-height-97822799; 14 +starting-at-height-98085299; 14 +starting-at-height-98347799; 12 +starting-at-height-98610299; 12 +starting-at-height-98872799; 12 +starting-at-height-99135299; 12 +starting-at-height-99397799; 10 +starting-at-height-99660299; 10 +starting-at-height-99922799; 10 +starting-at-height-100185299; 10 +starting-at-height-100447799; 8 +starting-at-height-100710299; 8 +starting-at-height-100972799; 8 +starting-at-height-101235299; 8 +starting-at-height-101497799; 8 +starting-at-height-101760299; 6 +starting-at-height-102022799; 6 +starting-at-height-102285299; 6 +starting-at-height-102547799; 6 +starting-at-height-102810299; 6 +starting-at-height-103072799; 6 +starting-at-height-103335299; 6 +starting-at-height-103597799; 4 +starting-at-height-103860299; 4 +starting-at-height-104122799; 4 +starting-at-height-104385299; 4 +starting-at-height-104647799; 4 +starting-at-height-104910299; 4 +starting-at-height-105172799; 4 +starting-at-height-105435299; 4 +starting-at-height-105697799; 4 +starting-at-height-105960299; 2 +starting-at-height-106222799; 2 +starting-at-height-106485299; 2 +starting-at-height-106747799; 2 +starting-at-height-107010299; 2 +starting-at-height-107272799; 2 +starting-at-height-107535299; 2 +starting-at-height-107797799; 2 +starting-at-height-108060299; 2 +starting-at-height-108322799; 2 +starting-at-height-108585299; 2 +starting-at-height-108847799; 2 +starting-at-height-109110299; 2 +starting-at-height-109372799; 2 +starting-at-height-109635299; 2 +starting-at-height-109897799; 2 +starting-at-height-110160299; 1 +starting-at-height-110422799; 0 + + +config-logging-broker.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_broker%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-recovery.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_recovery%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-logging-server.properties +console +sinkType; Async +level; Info +colorMode; Ansi + +console.component.levels + +file +sinkType; Async +level; Info +directory; logs +filePattern; logs/catapult_server%4N.log +rotationSize; 25MB +maxTotalSize; 1000MB +minFreeSpace; 100MB + +file.component.levels + + +config-messaging.properties +messaging +subscriberPort; 7902 +listenInterface; 0.0.0.0 + + +config-network.properties +network +identifier; private; NetworkIdentifier; Network identifier. +nemesisSignerPublicKey; 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533; Key; Nemesis public key. +nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. +generationHashSeed; 000000000000000000000000000000000000000000000000000000000000000A; ; +epochAdjustment; 1626575785s; utils::TimeSpan; Nemesis epoch time adjustment. + +chain +enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. +enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. +currencyMosaicId; 0x4DAE'C93E'2FAD'68E2; MosaicId; Mosaic id used as primary chain currency. +harvestingMosaicId; 0x4DAE'C93E'2FAD'68E2; MosaicId; Mosaic id used to provide harvesting ability. +blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. +blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. +importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. +importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. +maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. +maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. +defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. +maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. +maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. +initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. +maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. +totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. +minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. +minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. +votingSetGrouping; 1440; ; +maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. +minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. +maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. +harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. +harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. +harvestNetworkFeeSinkAddress; PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I; Address; Address of the harvest network fee sink account. +maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + +plugin:catapult.plugins.accountlink +dummy; to trigger plugin load + +plugin:catapult.plugins.aggregate +maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. +maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. +enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. +enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. +maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + +plugin:catapult.plugins.lockhash +lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. +maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + +plugin:catapult.plugins.locksecret +maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. +minProofSize; 0; uint16_t; Minimum size of a proof in bytes. +maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + +plugin:catapult.plugins.metadata +maxValueSize; 1024; uint16_t; Maximum metadata value size. + +plugin:catapult.plugins.mosaic +maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. +maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. +maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. +mosaicRentalFeeSinkAddress; PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI; Address; Address of the mosaic rental fee sink account. +mosaicRentalFee; 500000; Amount; Mosaic rental fee. + +plugin:catapult.plugins.multisig +maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. +maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. +maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + +plugin:catapult.plugins.namespace +maxNameSize; 64; uint8_t; Maximum namespace name size. +maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. +maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. +minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. +maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. +namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. +reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. +namespaceRentalFeeSinkAddress; PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ; Address; Address of the namespace rental fee sink account. +rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. +childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + +plugin:catapult.plugins.restrictionaccount +maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + +plugin:catapult.plugins.restrictionmosaic +maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + +plugin:catapult.plugins.transfer +maxMessageSize; 1024; uint16_t; Maximum transaction message size. + + +config-node.properties +node +port; 7900; unsigned short; Server port. +maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. +enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. +enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. +enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. +enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. +fileDatabaseBatchSize; 100; ; +enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. +transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. +maxHashesPerSyncAttempt; 370; ; +maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. +maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. +shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. +shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. +shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. +shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. +minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. +maxTimeBehindPullTransactionsStart; 5m; ; +transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. +unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. +unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. +connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. +syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. +socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). +socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. +maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. +blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. +blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. +blockDisruptorMaxMemorySize; 300MB; ; +transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. +transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. +transactionDisruptorMaxMemorySize; 20MB; ; +enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. +enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. +maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. +minPartnerNodeVersion; 1.0.0.0; ; +maxPartnerNodeVersion; 1.0.255.255; ; +trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. +localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. +listenInterface; 0.0.0.0; ; + +cache_database +enableStatistics; false +maxOpenFiles; 0 +maxBackgroundThreads; 0 +maxSubcompactionThreads; 0 +blockCacheSize; 0MB +memtableMemoryBudget; 0MB +maxWriteBatchSize; 5MB + +localnode +host; nemesis-private-node; string; Node host (leave empty to auto-detect IP). +friendlyName; nemesis-private-node; string; Node friendly name (leave empty to use address). +version; 1.0.1.0; uint32_t; Node version. +roles; Peer,Api; ionet::NodeRoles; Node roles. + +outgoing_connections +maxConnections; 10; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + +incoming_connections +maxConnections; 512; uint16_t; Maximum number of active connections. +maxConnectionAge; 200; uint16_t; Maximum connection age. +maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. +numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. +backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + +banning +defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. +maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. +keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. +maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. +numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). +readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. +maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. +minTransactionFailuresCountForBan; 8; ; +minTransactionFailuresPercentForBan; 10; ; + + +config-pt.properties +partialtransactions +cacheMaxResponseSize; 5MB +cacheMaxSize; 20MB + + +config-task.properties +logging task +startDelay; 1m +repeatDelay; 10m + +connect peers task for service Finalization +startDelay; 2s +repeatDelay; 1m + +finalization task +startDelay; 2m +repeatDelay; 15s + +pull finalization messages task +startDelay; 3s +repeatDelay; 1s + +pull finalization proof task +startDelay; 10s +repeatDelay; 50s + +harvesting task +startDelay; 30s +repeatDelay; 1s + +network chain height detection +startDelay; 1s +repeatDelay; 15s + +node discovery peers task +startDelay; 1m +minDelay; 1m +maxDelay; 10m +numPhaseOneRounds; 10 +numTransitionRounds; 20 + +node discovery ping task +startDelay; 2m +repeatDelay; 5m + +age peers task for service Readers +startDelay; 1m +repeatDelay; 1m + +batch partial transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Pt +startDelay; 3s +repeatDelay; 1m + +pull partial transactions task +startDelay; 10s +repeatDelay; 3s + +batch transaction task +startDelay; 500ms +repeatDelay; 500ms + +connect peers task for service Sync +startDelay; 1s +repeatDelay; 1m + +pull unconfirmed transactions task +startDelay; 4s +repeatDelay; 3s + +synchronizer task +startDelay; 3s +repeatDelay; 3s + +time synchronization task +startDelay; 1m +minDelay; 3m +maxDelay; 180m +numPhaseOneRounds; 5 +numTransitionRounds; 10 + +static node refresh task +startDelay; 5ms +minDelay; 15s +maxDelay; 24h +numPhaseOneRounds; 20 +numTransitionRounds; 20 + + +config-timesync.properties +timesynchronization +maxNodes; 20 +minImportance; 10'000'000'000 + + +config-user.properties +account +enableDelegatedHarvestersAutoDetection; true + +storage +seedDirectory; ./seed +certificateDirectory; ./cert +dataDirectory; ./data +pluginsDirectory; /usr/catapult/lib +votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/reports/node-config.rst b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/reports/node-config.rst new file mode 100644 index 000000000..6d436f117 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/reports/node-config.rst @@ -0,0 +1,888 @@ +Symbol Bootstrap Version: 1.1.0-alpha.0 + +config-database.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **database**; + databaseUri; mongodb://db:27017 + databaseName; catapult + maxWriterThreads; 8 + maxDropBatchSize; 10 + writeTimeout; 10m + **plugins**; + catapult.mongo.plugins.accountlink; true + catapult.mongo.plugins.aggregate; true + catapult.mongo.plugins.lockhash; true + catapult.mongo.plugins.locksecret; true + catapult.mongo.plugins.metadata; true + catapult.mongo.plugins.mosaic; true + catapult.mongo.plugins.multisig; true + catapult.mongo.plugins.namespace; true + catapult.mongo.plugins.restrictionaccount; true + catapult.mongo.plugins.restrictionmosaic; true + catapult.mongo.plugins.transfer; true + +config-extensions-broker.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; true + extension.mongo; true + extension.zeromq; true + extension.hashcache; true + +config-extensions-recovery.properties +===================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.filespooling; true + extension.hashcache; true + +config-extensions-server.properties +=================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **extensions**; + extension.filespooling; true + extension.partialtransaction; true + extension.addressextraction; false + extension.mongo; false + extension.zeromq; false + extension.harvesting; true + extension.syncsource; true + extension.diagnostics; true + extension.finalization; true + extension.hashcache; true + extension.networkheight; false + extension.nodediscovery; true + extension.packetserver; true + extension.pluginhandlers; true + extension.sync; true + extension.timesync; true + extension.transactionsink; true + extension.unbondedpruning; true + +config-finalization.properties +============================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **finalization**; + enableVoting; false + enableRevoteOnBoot; false + size; 10'000 + threshold; 7'000 + stepDuration; 5m + shortLivedCacheMessageDuration; 10m + messageSynchronizationMaxResponseSize; 20MB + maxHashesPerPoint; 256 + prevoteBlocksMultiple; 4 + unfinalizedBlocksDuration; 10m + +config-harvesting.properties +============================ +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **harvesting**; ; ; + harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. + harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. + enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. + maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. + delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. + beneficiaryAddress; PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ; Address; Address of the account receiving part of the harvested fee. + +config-inflation.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **inflation**; + starting-at-height-2; 0 + starting-at-height-5760; 191997042 + starting-at-height-172799; 183764522 + starting-at-height-435299; 175884998 + starting-at-height-697799; 168343336 + starting-at-height-960299; 161125048 + starting-at-height-1222799; 154216270 + starting-at-height-1485299; 147603728 + starting-at-height-1747799; 141274720 + starting-at-height-2010299; 135217090 + starting-at-height-2272799; 129419202 + starting-at-height-2535299; 123869918 + starting-at-height-2797799; 118558578 + starting-at-height-3060299; 113474978 + starting-at-height-3322799; 108609356 + starting-at-height-3585299; 103952364 + starting-at-height-3847799; 99495056 + starting-at-height-4110299; 95228870 + starting-at-height-4372799; 91145612 + starting-at-height-4635299; 87237436 + starting-at-height-4897799; 83496838 + starting-at-height-5160299; 79916630 + starting-at-height-5422799; 76489934 + starting-at-height-5685299; 73210170 + starting-at-height-5947799; 70071038 + starting-at-height-6210299; 67066506 + starting-at-height-6472799; 64190804 + starting-at-height-6735299; 61438406 + starting-at-height-6997799; 58804028 + starting-at-height-7260299; 56282608 + starting-at-height-7522799; 53869300 + starting-at-height-7785299; 51559472 + starting-at-height-8047799; 49348686 + starting-at-height-8310299; 47232696 + starting-at-height-8572799; 45207434 + starting-at-height-8835299; 43269014 + starting-at-height-9097799; 41413708 + starting-at-height-9360299; 39637956 + starting-at-height-9622799; 37938346 + starting-at-height-9885299; 36311610 + starting-at-height-10147799; 34754628 + starting-at-height-10410299; 33264406 + starting-at-height-10672799; 31838082 + starting-at-height-10935299; 30472918 + starting-at-height-11197799; 29166288 + starting-at-height-11460299; 27915686 + starting-at-height-11722799; 26718706 + starting-at-height-11985299; 25573052 + starting-at-height-12247799; 24476520 + starting-at-height-12510299; 23427008 + starting-at-height-12772799; 22422496 + starting-at-height-13035299; 21461056 + starting-at-height-13297799; 20540840 + starting-at-height-13560299; 19660082 + starting-at-height-13822799; 18817090 + starting-at-height-14085299; 18010244 + starting-at-height-14347799; 17237994 + starting-at-height-14610299; 16498858 + starting-at-height-14872799; 15791412 + starting-at-height-15135299; 15114302 + starting-at-height-15397799; 14466226 + starting-at-height-15660299; 13845938 + starting-at-height-15922799; 13252246 + starting-at-height-16185299; 12684012 + starting-at-height-16447799; 12140142 + starting-at-height-16710299; 11619592 + starting-at-height-16972799; 11121364 + starting-at-height-17235299; 10644498 + starting-at-height-17497799; 10188078 + starting-at-height-17760299; 9751230 + starting-at-height-18022799; 9333114 + starting-at-height-18285299; 8932924 + starting-at-height-18547799; 8549896 + starting-at-height-18810299; 8183290 + starting-at-height-19072799; 7832404 + starting-at-height-19335299; 7496562 + starting-at-height-19597799; 7175122 + starting-at-height-19860299; 6867464 + starting-at-height-20122799; 6573000 + starting-at-height-20385299; 6291160 + starting-at-height-20647799; 6021404 + starting-at-height-20910299; 5763216 + starting-at-height-21172799; 5516100 + starting-at-height-21435299; 5279578 + starting-at-height-21697799; 5053198 + starting-at-height-21960299; 4836526 + starting-at-height-22222799; 4629144 + starting-at-height-22485299; 4430652 + starting-at-height-22747799; 4240674 + starting-at-height-23010299; 4058840 + starting-at-height-23272799; 3884804 + starting-at-height-23535299; 3718230 + starting-at-height-23797799; 3558798 + starting-at-height-24060299; 3406202 + starting-at-height-24322799; 3260150 + starting-at-height-24585299; 3120360 + starting-at-height-24847799; 2986564 + starting-at-height-25110299; 2858506 + starting-at-height-25372799; 2735938 + starting-at-height-25635299; 2618624 + starting-at-height-25897799; 2506342 + starting-at-height-26160299; 2398874 + starting-at-height-26422799; 2296014 + starting-at-height-26685299; 2197564 + starting-at-height-26947799; 2103336 + starting-at-height-27210299; 2013150 + starting-at-height-27472799; 1926828 + starting-at-height-27735299; 1844210 + starting-at-height-27997799; 1765132 + starting-at-height-28260299; 1689446 + starting-at-height-28522799; 1617006 + starting-at-height-28785299; 1547672 + starting-at-height-29047799; 1481310 + starting-at-height-29310299; 1417794 + starting-at-height-29572799; 1357000 + starting-at-height-29835299; 1298814 + starting-at-height-30097799; 1243124 + starting-at-height-30360299; 1189820 + starting-at-height-30622799; 1138802 + starting-at-height-30885299; 1089972 + starting-at-height-31147799; 1043236 + starting-at-height-31410299; 998504 + starting-at-height-31672799; 955690 + starting-at-height-31935299; 914712 + starting-at-height-32197799; 875490 + starting-at-height-32460299; 837950 + starting-at-height-32722799; 802020 + starting-at-height-32985299; 767630 + starting-at-height-33247799; 734716 + starting-at-height-33510299; 703212 + starting-at-height-33772799; 673060 + starting-at-height-34035299; 644200 + starting-at-height-34297799; 616578 + starting-at-height-34560299; 590140 + starting-at-height-34822799; 564836 + starting-at-height-35085299; 540616 + starting-at-height-35347799; 517436 + starting-at-height-35610299; 495248 + starting-at-height-35872799; 474014 + starting-at-height-36135299; 453688 + starting-at-height-36397799; 434234 + starting-at-height-36660299; 415616 + starting-at-height-36922799; 397794 + starting-at-height-37185299; 380738 + starting-at-height-37447799; 364412 + starting-at-height-37710299; 348786 + starting-at-height-37972799; 333832 + starting-at-height-38235299; 319518 + starting-at-height-38497799; 305816 + starting-at-height-38760299; 292704 + starting-at-height-39022799; 280154 + starting-at-height-39285299; 268140 + starting-at-height-39547799; 256644 + starting-at-height-39810299; 245638 + starting-at-height-40072799; 235106 + starting-at-height-40335299; 225026 + starting-at-height-40597799; 215376 + starting-at-height-40860299; 206142 + starting-at-height-41122799; 197302 + starting-at-height-41385299; 188842 + starting-at-height-41647799; 180744 + starting-at-height-41910299; 172994 + starting-at-height-42172799; 165578 + starting-at-height-42435299; 158478 + starting-at-height-42697799; 151682 + starting-at-height-42960299; 145178 + starting-at-height-43222799; 138954 + starting-at-height-43485299; 132994 + starting-at-height-43747799; 127292 + starting-at-height-44010299; 121834 + starting-at-height-44272799; 116610 + starting-at-height-44535299; 111610 + starting-at-height-44797799; 106824 + starting-at-height-45060299; 102244 + starting-at-height-45322799; 97860 + starting-at-height-45585299; 93664 + starting-at-height-45847799; 89648 + starting-at-height-46110299; 85804 + starting-at-height-46372799; 82124 + starting-at-height-46635299; 78602 + starting-at-height-46897799; 75232 + starting-at-height-47160299; 72006 + starting-at-height-47422799; 68920 + starting-at-height-47685299; 65964 + starting-at-height-47947799; 63136 + starting-at-height-48210299; 60428 + starting-at-height-48472799; 57838 + starting-at-height-48735299; 55358 + starting-at-height-48997799; 52984 + starting-at-height-49260299; 50712 + starting-at-height-49522799; 48538 + starting-at-height-49785299; 46456 + starting-at-height-50047799; 44464 + starting-at-height-50310299; 42558 + starting-at-height-50572799; 40732 + starting-at-height-50835299; 38986 + starting-at-height-51097799; 37314 + starting-at-height-51360299; 35714 + starting-at-height-51622799; 34182 + starting-at-height-51885299; 32716 + starting-at-height-52147799; 31314 + starting-at-height-52410299; 29972 + starting-at-height-52672799; 28686 + starting-at-height-52935299; 27456 + starting-at-height-53197799; 26278 + starting-at-height-53460299; 25152 + starting-at-height-53722799; 24074 + starting-at-height-53985299; 23042 + starting-at-height-54247799; 22054 + starting-at-height-54510299; 21108 + starting-at-height-54772799; 20202 + starting-at-height-55035299; 19336 + starting-at-height-55297799; 18506 + starting-at-height-55560299; 17714 + starting-at-height-55822799; 16954 + starting-at-height-56085299; 16226 + starting-at-height-56347799; 15532 + starting-at-height-56610299; 14866 + starting-at-height-56872799; 14228 + starting-at-height-57135299; 13618 + starting-at-height-57397799; 13034 + starting-at-height-57660299; 12474 + starting-at-height-57922799; 11940 + starting-at-height-58185299; 11428 + starting-at-height-58447799; 10938 + starting-at-height-58710299; 10468 + starting-at-height-58972799; 10020 + starting-at-height-59235299; 9590 + starting-at-height-59497799; 9178 + starting-at-height-59760299; 8786 + starting-at-height-60022799; 8408 + starting-at-height-60285299; 8048 + starting-at-height-60547799; 7702 + starting-at-height-60810299; 7372 + starting-at-height-61072799; 7056 + starting-at-height-61335299; 6754 + starting-at-height-61597799; 6464 + starting-at-height-61860299; 6186 + starting-at-height-62122799; 5922 + starting-at-height-62385299; 5668 + starting-at-height-62647799; 5424 + starting-at-height-62910299; 5192 + starting-at-height-63172799; 4970 + starting-at-height-63435299; 4756 + starting-at-height-63697799; 4552 + starting-at-height-63960299; 4356 + starting-at-height-64222799; 4170 + starting-at-height-64485299; 3992 + starting-at-height-64747799; 3820 + starting-at-height-65010299; 3656 + starting-at-height-65272799; 3500 + starting-at-height-65535299; 3350 + starting-at-height-65797799; 3206 + starting-at-height-66060299; 3068 + starting-at-height-66322799; 2936 + starting-at-height-66585299; 2810 + starting-at-height-66847799; 2690 + starting-at-height-67110299; 2574 + starting-at-height-67372799; 2464 + starting-at-height-67635299; 2358 + starting-at-height-67897799; 2258 + starting-at-height-68160299; 2160 + starting-at-height-68422799; 2068 + starting-at-height-68685299; 1980 + starting-at-height-68947799; 1894 + starting-at-height-69210299; 1812 + starting-at-height-69472799; 1736 + starting-at-height-69735299; 1660 + starting-at-height-69997799; 1590 + starting-at-height-70260299; 1522 + starting-at-height-70522799; 1456 + starting-at-height-70785299; 1394 + starting-at-height-71047799; 1334 + starting-at-height-71310299; 1276 + starting-at-height-71572799; 1222 + starting-at-height-71835299; 1170 + starting-at-height-72097799; 1120 + starting-at-height-72360299; 1072 + starting-at-height-72622799; 1026 + starting-at-height-72885299; 982 + starting-at-height-73147799; 938 + starting-at-height-73410299; 898 + starting-at-height-73672799; 860 + starting-at-height-73935299; 824 + starting-at-height-74197799; 788 + starting-at-height-74460299; 754 + starting-at-height-74722799; 722 + starting-at-height-74985299; 690 + starting-at-height-75247799; 662 + starting-at-height-75510299; 632 + starting-at-height-75772799; 606 + starting-at-height-76035299; 580 + starting-at-height-76297799; 554 + starting-at-height-76560299; 530 + starting-at-height-76822799; 508 + starting-at-height-77085299; 486 + starting-at-height-77347799; 466 + starting-at-height-77610299; 446 + starting-at-height-77872799; 426 + starting-at-height-78135299; 408 + starting-at-height-78397799; 390 + starting-at-height-78660299; 374 + starting-at-height-78922799; 358 + starting-at-height-79185299; 342 + starting-at-height-79447799; 328 + starting-at-height-79710299; 314 + starting-at-height-79972799; 300 + starting-at-height-80235299; 286 + starting-at-height-80497799; 274 + starting-at-height-80760299; 262 + starting-at-height-81022799; 252 + starting-at-height-81285299; 240 + starting-at-height-81547799; 230 + starting-at-height-81810299; 220 + starting-at-height-82072799; 210 + starting-at-height-82335299; 202 + starting-at-height-82597799; 194 + starting-at-height-82860299; 184 + starting-at-height-83122799; 176 + starting-at-height-83385299; 170 + starting-at-height-83647799; 162 + starting-at-height-83910299; 154 + starting-at-height-84172799; 148 + starting-at-height-84435299; 142 + starting-at-height-84697799; 136 + starting-at-height-84960299; 130 + starting-at-height-85222799; 124 + starting-at-height-85485299; 118 + starting-at-height-85747799; 114 + starting-at-height-86010299; 108 + starting-at-height-86272799; 104 + starting-at-height-86535299; 100 + starting-at-height-86797799; 96 + starting-at-height-87060299; 92 + starting-at-height-87322799; 88 + starting-at-height-87585299; 84 + starting-at-height-87847799; 80 + starting-at-height-88110299; 76 + starting-at-height-88372799; 72 + starting-at-height-88635299; 70 + starting-at-height-88897799; 66 + starting-at-height-89160299; 64 + starting-at-height-89422799; 62 + starting-at-height-89685299; 58 + starting-at-height-89947799; 56 + starting-at-height-90210299; 54 + starting-at-height-90472799; 52 + starting-at-height-90735299; 48 + starting-at-height-90997799; 46 + starting-at-height-91260299; 44 + starting-at-height-91522799; 42 + starting-at-height-91785299; 40 + starting-at-height-92047799; 40 + starting-at-height-92310299; 38 + starting-at-height-92572799; 36 + starting-at-height-92835299; 34 + starting-at-height-93097799; 32 + starting-at-height-93360299; 32 + starting-at-height-93622799; 30 + starting-at-height-93885299; 28 + starting-at-height-94147799; 28 + starting-at-height-94410299; 26 + starting-at-height-94672799; 24 + starting-at-height-94935299; 24 + starting-at-height-95197799; 22 + starting-at-height-95460299; 22 + starting-at-height-95722799; 20 + starting-at-height-95985299; 20 + starting-at-height-96247799; 18 + starting-at-height-96510299; 18 + starting-at-height-96772799; 18 + starting-at-height-97035299; 16 + starting-at-height-97297799; 16 + starting-at-height-97560299; 14 + starting-at-height-97822799; 14 + starting-at-height-98085299; 14 + starting-at-height-98347799; 12 + starting-at-height-98610299; 12 + starting-at-height-98872799; 12 + starting-at-height-99135299; 12 + starting-at-height-99397799; 10 + starting-at-height-99660299; 10 + starting-at-height-99922799; 10 + starting-at-height-100185299; 10 + starting-at-height-100447799; 8 + starting-at-height-100710299; 8 + starting-at-height-100972799; 8 + starting-at-height-101235299; 8 + starting-at-height-101497799; 8 + starting-at-height-101760299; 6 + starting-at-height-102022799; 6 + starting-at-height-102285299; 6 + starting-at-height-102547799; 6 + starting-at-height-102810299; 6 + starting-at-height-103072799; 6 + starting-at-height-103335299; 6 + starting-at-height-103597799; 4 + starting-at-height-103860299; 4 + starting-at-height-104122799; 4 + starting-at-height-104385299; 4 + starting-at-height-104647799; 4 + starting-at-height-104910299; 4 + starting-at-height-105172799; 4 + starting-at-height-105435299; 4 + starting-at-height-105697799; 4 + starting-at-height-105960299; 2 + starting-at-height-106222799; 2 + starting-at-height-106485299; 2 + starting-at-height-106747799; 2 + starting-at-height-107010299; 2 + starting-at-height-107272799; 2 + starting-at-height-107535299; 2 + starting-at-height-107797799; 2 + starting-at-height-108060299; 2 + starting-at-height-108322799; 2 + starting-at-height-108585299; 2 + starting-at-height-108847799; 2 + starting-at-height-109110299; 2 + starting-at-height-109372799; 2 + starting-at-height-109635299; 2 + starting-at-height-109897799; 2 + starting-at-height-110160299; 1 + starting-at-height-110422799; 0 + +config-logging-broker.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_broker%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-recovery.properties +================================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_recovery%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-logging-server.properties +================================ +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **console**; + sinkType; Async + level; Info + colorMode; Ansi + **console.component.levels**; + **file**; + sinkType; Async + level; Info + directory; logs + filePattern; logs/catapult_server%4N.log + rotationSize; 25MB + maxTotalSize; 1000MB + minFreeSpace; 100MB + **file.component.levels**; + +config-messaging.properties +=========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **messaging**; + subscriberPort; 7902 + listenInterface; 0.0.0.0 + +config-network.properties +========================= +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **network**; ; ; + identifier; private; NetworkIdentifier; Network identifier. + nemesisSignerPublicKey; 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533; Key; Nemesis public key. + nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. + generationHashSeed; 000000000000000000000000000000000000000000000000000000000000000A; ; + epochAdjustment; 1626575785s; utils::TimeSpan; Nemesis epoch time adjustment. + **chain**; ; ; + enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. + enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. + currencyMosaicId; 0x4DAE'C93E'2FAD'68E2; MosaicId; Mosaic id used as primary chain currency. + harvestingMosaicId; 0x4DAE'C93E'2FAD'68E2; MosaicId; Mosaic id used to provide harvesting ability. + blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. + blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. + importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. + importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. + maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. + maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. + defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. + maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. + maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. + initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. + maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. + totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. + minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. + minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. + votingSetGrouping; 1440; ; + maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. + minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. + maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. + harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. + harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. + harvestNetworkFeeSinkAddress; PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I; Address; Address of the harvest network fee sink account. + maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. + **plugin:catapult.plugins.accountlink**; + dummy; to trigger plugin load + **plugin:catapult.plugins.aggregate**; ; ; + maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. + maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. + enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. + enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. + maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. + **plugin:catapult.plugins.lockhash**; ; ; + lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. + maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. + **plugin:catapult.plugins.locksecret**; ; ; + maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. + minProofSize; 0; uint16_t; Minimum size of a proof in bytes. + maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. + **plugin:catapult.plugins.metadata**; ; ; + maxValueSize; 1024; uint16_t; Maximum metadata value size. + **plugin:catapult.plugins.mosaic**; ; ; + maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. + maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. + maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. + mosaicRentalFeeSinkAddress; PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI; Address; Address of the mosaic rental fee sink account. + mosaicRentalFee; 500000; Amount; Mosaic rental fee. + **plugin:catapult.plugins.multisig**; ; ; + maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. + maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. + maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. + **plugin:catapult.plugins.namespace**; ; ; + maxNameSize; 64; uint8_t; Maximum namespace name size. + maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. + maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. + minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. + maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. + namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. + reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. + namespaceRentalFeeSinkAddress; PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ; Address; Address of the namespace rental fee sink account. + rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. + childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. + **plugin:catapult.plugins.restrictionaccount**; ; ; + maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. + **plugin:catapult.plugins.restrictionmosaic**; ; ; + maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. + **plugin:catapult.plugins.transfer**; ; ; + maxMessageSize; 1024; uint16_t; Maximum transaction message size. + +config-node.properties +====================== +.. csv-table:: + :header: "Property", "Value", "Type", "Description" + :delim: ; + + **node**; ; ; + port; 7900; unsigned short; Server port. + maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. + enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. + enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. + enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. + enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. + fileDatabaseBatchSize; 100; ; + enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. + transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. + maxHashesPerSyncAttempt; 370; ; + maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. + maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. + shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. + shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. + shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. + shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. + minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. + maxTimeBehindPullTransactionsStart; 5m; ; + transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. + unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. + unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. + connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. + syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. + socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). + socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. + maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. + blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. + blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. + blockDisruptorMaxMemorySize; 300MB; ; + transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. + transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. + transactionDisruptorMaxMemorySize; 20MB; ; + enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. + enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. + maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. + minPartnerNodeVersion; 1.0.0.0; ; + maxPartnerNodeVersion; 1.0.255.255; ; + trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. + localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. + listenInterface; 0.0.0.0; ; + **cache_database**; + enableStatistics; false + maxOpenFiles; 0 + maxBackgroundThreads; 0 + maxSubcompactionThreads; 0 + blockCacheSize; 0MB + memtableMemoryBudget; 0MB + maxWriteBatchSize; 5MB + **localnode**; ; ; + host; nemesis-private-node; string; Node host (leave empty to auto-detect IP). + friendlyName; nemesis-private-node; string; Node friendly name (leave empty to use address). + version; 1.0.1.0; uint32_t; Node version. + roles; Peer,Api; ionet::NodeRoles; Node roles. + **outgoing_connections**; ; ; + maxConnections; 10; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + **incoming_connections**; ; ; + maxConnections; 512; uint16_t; Maximum number of active connections. + maxConnectionAge; 200; uint16_t; Maximum connection age. + maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. + numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. + backlogSize; 512; uint16_t; Maximum size of the pending connections queue. + **banning**; ; ; + defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. + maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. + keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. + maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. + numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). + readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. + maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. + minTransactionFailuresCountForBan; 8; ; + minTransactionFailuresPercentForBan; 10; ; + +config-pt.properties +==================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **partialtransactions**; + cacheMaxResponseSize; 5MB + cacheMaxSize; 20MB + +config-task.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **logging task**; + startDelay; 1m + repeatDelay; 10m + **connect peers task for service Finalization**; + startDelay; 2s + repeatDelay; 1m + **finalization task**; + startDelay; 2m + repeatDelay; 15s + **pull finalization messages task**; + startDelay; 3s + repeatDelay; 1s + **pull finalization proof task**; + startDelay; 10s + repeatDelay; 50s + **harvesting task**; + startDelay; 30s + repeatDelay; 1s + **network chain height detection**; + startDelay; 1s + repeatDelay; 15s + **node discovery peers task**; + startDelay; 1m + minDelay; 1m + maxDelay; 10m + numPhaseOneRounds; 10 + numTransitionRounds; 20 + **node discovery ping task**; + startDelay; 2m + repeatDelay; 5m + **age peers task for service Readers**; + startDelay; 1m + repeatDelay; 1m + **batch partial transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Pt**; + startDelay; 3s + repeatDelay; 1m + **pull partial transactions task**; + startDelay; 10s + repeatDelay; 3s + **batch transaction task**; + startDelay; 500ms + repeatDelay; 500ms + **connect peers task for service Sync**; + startDelay; 1s + repeatDelay; 1m + **pull unconfirmed transactions task**; + startDelay; 4s + repeatDelay; 3s + **synchronizer task**; + startDelay; 3s + repeatDelay; 3s + **time synchronization task**; + startDelay; 1m + minDelay; 3m + maxDelay; 180m + numPhaseOneRounds; 5 + numTransitionRounds; 10 + **static node refresh task**; + startDelay; 5ms + minDelay; 15s + maxDelay; 24h + numPhaseOneRounds; 20 + numTransitionRounds; 20 + +config-timesync.properties +========================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **timesynchronization**; + maxNodes; 20 + minImportance; 10'000'000'000 + +config-user.properties +====================== +.. csv-table:: + :header: "Property", "Value" + :delim: ; + + **account**; + enableDelegatedHarvestersAutoDetection; true + **storage**; + seedDirectory; ./seed + certificateDirectory; ./cert + dataDirectory; ./data + pluginsDirectory; /usr/catapult/lib + votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/app.conf.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/app.conf.js new file mode 100755 index 000000000..6277c735e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/app.conf.js @@ -0,0 +1,23 @@ +var appConfig = { + title: 'Symbol Bootstrap Wallet', + constants: { + EVENTS_THROTTLING_TIME: 6000, + MAX_LISTENER_RECONNECT_TRIES: 20, + MAX_PASSWORD_LENGTH: 64, + MAX_REMOTE_ACCOUNT_CHECKS: 10, + MAX_SEED_ACCOUNTS_NUMBER: 10, + MIN_PASSWORD_LENGTH: 8, + SEED_ACCOUNT_NAME_PREFIX: 'SeedWallet-', + ANNOUNCE_TRANSACTION_TIMEOUT: 240000, + DECIMAL_SEPARATOR: Number('1.1').toLocaleString().substring(1, 2), + }, + languages: [ + { value: 'en-US', label: 'English' }, + { value: 'zh-CN', label: '中文' }, + { value: 'ja-JP', label: '日本語' }, + ], + marketServerUrl: 'http://app.nemcn.io', + articlesFeedUrl: 'http://rssmix.com/u/11801188/rss.xml', +} +window.appConfig = appConfig +console.log('appConfig loaded!', appConfig) diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/fees.conf.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/fees.conf.js new file mode 100755 index 000000000..1a40c3f28 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/fees.conf.js @@ -0,0 +1,9 @@ +var feesConfig = { + median: 10, + free: 0, + slow: 5, + slowest: 1, + fast: 20, +} +window.feesConfig = feesConfig +console.log('feesConfig loaded!', feesConfig) diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/network.conf.js b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/network.conf.js new file mode 100755 index 000000000..2047a2e77 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/network.conf.js @@ -0,0 +1,40 @@ +var networkTypeConfig = { + "explorerUrl": "", + "faucetUrl": "http://localhost:100", + "defaultNetworkType": 120, + "defaultNodeUrl": "http://nemesis-private-node:3000", + "networkConfigurationDefaults": { + "maxMosaicDivisibility": 6, + "namespaceGracePeriodDuration": 2592000, + "lockedFundsPerAggregate": "10000000", + "maxCosignatoriesPerAccount": 25, + "blockGenerationTargetTime": 30, + "maxNamespaceDepth": 3, + "maxMosaicDuration": 315360000, + "minNamespaceDuration": 2592000, + "maxNamespaceDuration": 157680000, + "maxTransactionsPerAggregate": 100, + "maxCosignedAccountsPerAccount": 25, + "maxMessageSize": 1024, + "maxMosaicAtomicUnits": 8999999999000000, + "currencyMosaicId": "4DAEC93E2FAD68E2", + "harvestingMosaicId": "4DAEC93E2FAD68E2", + "defaultDynamicFeeMultiplier": 100, + "epochAdjustment": 1626575785, + "totalChainImportance": 7842928625000000, + "generationHash": "000000000000000000000000000000000000000000000000000000000000000A" + }, + "nodes": [ + {"friendlyName": "nemesis-private-node", "roles": 2, "url": "http://nemesis-private-node:3000"}, + {"friendlyName": "testprefix-dual-001.mytest.com", "roles": 2, "url": "http://testprefix-dual-001.mytest.com:3000"}, + {"friendlyName": "testprefix-dual-002.mytest.com", "roles": 2, "url": "http://testprefix-dual-002.mytest.com:3000"}, + {"friendlyName": "testprefix-demo-001.mytest.com", "roles": 2, "url": "http://testprefix-demo-001.mytest.com:3000"}, + ] +} +var networkConfig = { 120 : networkTypeConfig } +window.networkConfig = networkConfig +console.log('networkConfig loaded!', networkConfig) + + + + diff --git a/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/profileImporter.html b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/profileImporter.html new file mode 100755 index 000000000..bd0ee1add --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nemesis-target/wallets/wallet/profileImporter.html @@ -0,0 +1,140 @@ + + + + + + Profile Importer + + + +

Profile Importer File Form

+ + +
+
+
+ + +
+ +

Profile Importer Text Form

+
+
+ +
+
+ Go back to the wallet + + diff --git a/packages/network-cli/test/expectedTargets/network1-end/network-input.yml b/packages/network-cli/test/expectedTargets/network1-end/network-input.yml new file mode 100644 index 000000000..b2159288e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/network-input.yml @@ -0,0 +1,25 @@ +preset: custom-network-preset.yml +domain: mytest.com +suffix: testprefix +networkDescription: My Private Test Network +networkType: 120 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment: 1626575785 +isNewNetwork: true +deploymentData: + type: CUSTOM +faucetBalances: + - 392146430 +nodeTypes: + - + nickName: dual + nodeType: VotingDual + balances: + - 3000000 + total: 2 + - + nickName: demo + nodeType: HarvestingDemo + balances: + - 1000000 + total: 1 diff --git a/packages/network-cli/test/expectedTargets/network1-end/network.yml b/packages/network-cli/test/expectedTargets/network1-end/network.yml new file mode 100644 index 000000000..d770edf36 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/network.yml @@ -0,0 +1,131 @@ +preset: custom-network-preset.yml +domain: mytest.com +suffix: testprefix +networkDescription: My Private Test Network +networkType: 120 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment: 1626575785 +isNewNetwork: true +deploymentData: + type: CUSTOM +faucetBalances: + - 392146430 +nodes: + - + number: 1 + friendlyName: testprefix-dual-001 + assembly: dual + hostname: testprefix-dual-001.mytest.com + customPreset: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: testprefix-dual-001 + host: testprefix-dual-001.mytest.com + voting: true + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + nickName: dual + nodeType: VotingDual + balances: + - 3000000 + addresses: + name: node + friendlyName: testprefix-dual-001 + roles: 'Peer,Api,Voting' + main: + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + address: PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ + transport: + publicKey: 4FCF4C53E1B5B83D3471C137CD515B0521570F518D872A2D15CC8261D4F959E2 + address: PBEH7IAD2BL2C77M2VZLMR3TUOHSXN33GNAQVWA + remote: + publicKey: A7A9A75969B83AAB175B213C4E41B7A2EC4F6ACA1CBB48084E02A11B867C9B02 + address: PCH66C2TPOMFEHZ2VV36FS5KHPHJCZCN627RMHY + vrf: + publicKey: 0B418BE6994BB99B4A6360CCD31ED32C83C6FB625227B1221A61C9B2C5BCF37C + address: PAOBNGHKCPWZZ4HX5A6YAD4RRZ4FYJGBXAJBSTI + voting: + - + publicKey: 5604D972C5400AFE987123555FE82D77ABFDFB87AADB0AB35AD95EC19A28D729 + startEpoch: 1 + endEpoch: 360 + filename: private_key_tree1.dat + - + number: 2 + friendlyName: testprefix-dual-002 + assembly: dual + hostname: testprefix-dual-002.mytest.com + customPreset: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: testprefix-dual-002 + host: testprefix-dual-002.mytest.com + voting: true + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + nickName: dual + nodeType: VotingDual + balances: + - 3000000 + addresses: + name: node + friendlyName: testprefix-dual-002 + roles: 'Peer,Api,Voting' + main: + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + address: PBTPFLC4CEMABBIPQ3FEXBTBC7C346M4IDVZUBQ + transport: + publicKey: 19D38D98E823639C9A4CB4D2F2CC47A73809C75879B7C3E4F5948303ACBAA442 + address: PDSLXRVHILNOYLDKLEPKE73Y4AISZQM55WQLXCY + remote: + publicKey: E62E9082B3434D3B7830A450A6FFAAF099B0A8034738C23D0FC609AE8BC59326 + address: PCAAYTZYEKAV7VV5SJCFG5L2AZAJP3HCY6KU2BA + vrf: + publicKey: 6DBAF259008F75ECE41EB1EDB70919D211127C681D9BFEAD6080CCC5A460D821 + address: PB343QLIW7J5VMPKDVRFIDW743UEGLRROLR2T7A + voting: + - + publicKey: 06FD116F1F0EF27C2946C9683C10129BFE4406441C9E94F5D97224DC12631B60 + startEpoch: 1 + endEpoch: 360 + filename: private_key_tree1.dat + - + number: 3 + friendlyName: testprefix-demo-001 + assembly: demo + hostname: testprefix-demo-001.mytest.com + customPreset: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: testprefix-demo-001 + host: testprefix-demo-001.mytest.com + voting: false + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + nickName: demo + nodeType: HarvestingDemo + balances: + - 1000000 + addresses: + name: node + friendlyName: testprefix-demo-001 + roles: 'Peer,Api' + main: + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + address: PC6AHZ6XNGT4MNWORDHDXFJOCYUU56UBPZ2IEBY + transport: + publicKey: 80E9EE3CA7BA127A10C53732874B88E749DF63C2F1CC0581CC9D716CFE5C6444 + address: PCNZERL5W7S6PUDIX5KQYYNI7GDKRIRKM4QCYPI + remote: + publicKey: 49F7602F5C0D1C291388FE3F6E7825AD51D4AAD66183BF80A8E3AF2B5E583F07 + address: PDRNWMKM3HLSWS3WVAPET6RKP6BIXI2WUCONMGI + vrf: + publicKey: D7B67A71A653068EBF6DE4EA6169D40BF718CD62C47D6BCA32435D4FEEBD7802 + address: PDAZMG7P2CDDCT2DV57OWF45ZFUDNRBYQFHKC7I +nemesisSeedFolder: nemesis-seed diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/custom-network-preset.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/custom-network-preset.yml new file mode 100644 index 000000000..fe3b63ebd --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/custom-network-preset.yml @@ -0,0 +1,518 @@ +networkDescription: My Private Test Network +baseNamespace: pirate +batchVerificationRandomSource: /dev/urandom +harvestBeneficiaryPercentage: 25 +epochAdjustment: 1626575785s +enableRevoteOnBoot: false +maxHarvesterBalance: 50000000000000 +maxMosaicAtomicUnits: 8999999999000000 +minHarvesterBalance: 10000000000 +minVoterBalance: 3000000000000 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +harvestNetworkFeeSinkAddress: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I +namespaceRentalFeeSinkAddress: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +mosaicRentalFeeSinkAddress: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +nemesisSignerPublicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +networkType: 120 +totalChainImportance: 7842928625000000 +initialCurrencyAtomicUnits: 7842928625000000 +importanceGrouping: 720 +votingSetGrouping: 1440 +minVotingKeyLifetime: 112 +maxVotingKeyLifetime: 360 +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +stepDuration: 5m +maxBlockFutureTime: 300ms +maxAccountRestrictionValues: 100 +maxSecretLockDuration: 365d +maxNamespaceDuration: 1825d +minNamespaceDuration: 30d +namespaceGracePeriodDuration: 30d +blockGenerationTargetTime: 30s +defaultDynamicFeeMultiplier: 100 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +mosaicRentalFee: 500000 +throttlingBurst: 80 +throttlingRate: 60 +fileDatabaseBatchSize: 100 +minProofSize: 0 +syncTimeout: 5m +maxChildNamespaces: 100 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +timeSynchronizationMinImportance: 10000000000 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +nemesis: + referenceOnly: true + mosaics: + - + name: gold + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nemesisSeedFolder: nemesis-seed +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +knownRestGateways: + - 'http://testprefix-dual-001.mytest.com:3000' + - 'http://testprefix-dual-002.mytest.com:3000' + - 'http://testprefix-demo-001.mytest.com:3000' +knownPeers: + api-node: + - + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + endpoint: + host: testprefix-dual-001.mytest.com + port: 7900 + metadata: + name: testprefix-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + endpoint: + host: testprefix-dual-002.mytest.com + port: 7900 + metadata: + name: testprefix-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + endpoint: + host: testprefix-demo-001.mytest.com + port: 7900 + metadata: + name: testprefix-demo-001 + roles: 'Api,Peer' + peer-node: [] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/custom-preset.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/custom-preset.yml new file mode 100644 index 000000000..0333658a0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/custom-preset.yml @@ -0,0 +1,10 @@ +privateKeySecurityMode: PROMPT_MAIN_TRANSPORT +nodes: + - + friendlyName: testprefix-dual-001 + host: testprefix-dual-001.mytest.com + voting: true + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false +nemesisSeedFolder: nemesis-seed diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/00001.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/00001.dat new file mode 100644 index 000000000..2b710b43c Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/00001.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/00001.proof b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/00001.proof new file mode 100644 index 000000000..f7c5365ed Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/00001.proof differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/00001.stmt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/00001.stmt new file mode 100644 index 000000000..fbb5e44ff Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/00001.stmt differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/hashes.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/hashes.dat new file mode 100644 index 000000000..ba7a0832b Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/hashes.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/proof.heights.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/00000/proof.heights.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/proof.index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/proof.index.dat new file mode 100644 index 000000000..87159da17 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/proof.index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/summary.txt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/summary.txt new file mode 100644 index 000000000..b41684d8b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/nemesis-seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 5 + Voting Count: 2 + Voting Balance: 6000000000000 +* + Generation Hash: D43808D5F3FDA9AC541CCB75F00F7077202787C4DA7867BF06AB37B1D7B4EA0C +Transactions Hash: 532DCBAA6DFC0DF8D997B61DD899E6E6399405AC9FC6383082B9800FACE9AD4D + Receipts Hash: 29D0679D001DAD260D91725998750299EE34850E79F96802E02604D39575990F + State Hash: ABAA4C012E97BFAADC4A73083A49C6ECE5C34FBA4706FF1DE8E447665B6C86D9 +--- Components (9) --- + + BF2BA38A71F170717F4E35D6BF7F2865F8F7EB1F9E7B9B5E248C89A3D7ED68C2 + + 3D01A4ABB500C7F4B5C20FCED627B9D207A29A27E45E40A9D128540EDC651C8B + + 68E7709CF7470282A40B1CA255DFED6B9C762F29B77B1DAC3C25A7C058143B75 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/addresses.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/addresses.yml new file mode 100644 index 000000000..ae4656cff --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/addresses.yml @@ -0,0 +1,28 @@ +version: 2 +networkType: 120 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +nodes: + - + name: node + friendlyName: testprefix-dual-001 + roles: 'Peer,Api,Voting' + main: + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + address: PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ + transport: + publicKey: 4FCF4C53E1B5B83D3471C137CD515B0521570F518D872A2D15CC8261D4F959E2 + address: PBEH7IAD2BL2C77M2VZLMR3TUOHSXN33GNAQVWA + remote: + privateKey: 2BE1D4BE6DAA63C254C9D232DD901B04B45EC2317428FE0E3D2C000AE2D12C76 + publicKey: A7A9A75969B83AAB175B213C4E41B7A2EC4F6ACA1CBB48084E02A11B867C9B02 + address: PCH66C2TPOMFEHZ2VV36FS5KHPHJCZCN627RMHY + vrf: + privateKey: F88DFE368E27967CF49EDF971B6045DCCDC748E7B3C3E45AC38D02DD4F3CE82A + publicKey: 0B418BE6994BB99B4A6360CCD31ED32C83C6FB625227B1221A61C9B2C5BCF37C + address: PAOBNGHKCPWZZ4HX5A6YAD4RRZ4FYJGBXAJBSTI + voting: + - + publicKey: 5604D972C5400AFE987123555FE82D77ABFDFB87AADB0AB35AD95EC19A28D729 + startEpoch: 1 + endEpoch: 360 + filename: private_key_tree1.dat diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/docker-compose.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/docker-compose.yml new file mode 100644 index 000000000..f36670590 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/docker-compose.yml @@ -0,0 +1,73 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - testprefix-dual-001.mytest.com + hostname: testprefix-dual-001.mytest.com + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/explorer/run.sh b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/mongoDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/server/start.sh b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..6682c256e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQFLwQjKDOE+Kx74V5CyncrK67I8TAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNFoXDTQxMDcxNTExMDQzNFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEA/1oGQIu5D87deIuvZxFY +/0CtfG0/p1nPJJnE3LknYX8wBQYDK2VwA0EAzd0/6m2C4Aw8vBl30r4Ak3cCWFnG +cEw3lUWNbOWUl74sP6S9DB4WNiHWnmUxk0/s4DQesZcWRyqJGeULoPPiBQ== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..bca7ca6a2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQApLxx1Qjk2wONMrjanToVpxCCLTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNFoXDTIyMDczMDExMDQzNFowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAE/PTFPhtbg9NHHBN81RWwUhVw9RjYcq +LRXMgmHU+VniMAUGAytlcANBAP/nVzYCGInDUKebXuzhawPNdwi20rk5+SbRS/6I +nCz0x0gVciK73HDjijtP3ikF2mlwd8Ows9HWfi9E7ibLoQw= +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..6dc0632c6 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEICdPWYMfPo3cUgMyOqi8XMgBuZlNT2bVHATn2Q6G6AFE +-----END PRIVATE KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..94aa29108 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = testprefix-dual-001.mytest.com +friendlyName = testprefix-dual-001 +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/rest.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..9bfc358ec --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "private", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/00001.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..2b710b43c Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/00001.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/00001.proof b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..f7c5365ed Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/00001.proof differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/00001.stmt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..fbb5e44ff Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/hashes.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..ba7a0832b Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/proof.heights.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/proof.index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..87159da17 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/proof.index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/summary.txt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/summary.txt new file mode 100644 index 000000000..b41684d8b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 5 + Voting Count: 2 + Voting Balance: 6000000000000 +* + Generation Hash: D43808D5F3FDA9AC541CCB75F00F7077202787C4DA7867BF06AB37B1D7B4EA0C +Transactions Hash: 532DCBAA6DFC0DF8D997B61DD899E6E6399405AC9FC6383082B9800FACE9AD4D + Receipts Hash: 29D0679D001DAD260D91725998750299EE34850E79F96802E02604D39575990F + State Hash: ABAA4C012E97BFAADC4A73083A49C6ECE5C34FBA4706FF1DE8E447665B6C86D9 +--- Components (9) --- + + BF2BA38A71F170717F4E35D6BF7F2865F8F7EB1F9E7B9B5E248C89A3D7ED68C2 + + 3D01A4ABB500C7F4B5C20FCED627B9D207A29A27E45E40A9D128540EDC651C8B + + 68E7709CF7470282A40B1CA255DFED6B9C762F29B77B1DAC3C25A7C058143B75 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-database.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-finalization.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..52286375a --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 2BE1D4BE6DAA63C254C9D232DD901B04B45EC2317428FE0E3D2C000AE2D12C76 +harvesterVrfPrivateKey = F88DFE368E27967CF49EDF971B6045DCCDC748E7B3C3E45AC38D02DD4F3CE82A + +enableAutoHarvesting = true +maxUnlockedAccounts = 10 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-inflation.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-messaging.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..94aa29108 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = testprefix-dual-001.mytest.com +friendlyName = testprefix-dual-001 +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-pt.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-task.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-timesync.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-user.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/peers-api.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..523e2b7ba --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,38 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F", + "endpoint": { + "host": "testprefix-dual-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF", + "endpoint": { + "host": "testprefix-dual-002.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411", + "endpoint": { + "host": "testprefix-demo-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-demo-001", + "roles": "Api,Peer" + } + } + ] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/peers-p2p.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/ca.cert.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..6682c256e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQFLwQjKDOE+Kx74V5CyncrK67I8TAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNFoXDTQxMDcxNTExMDQzNFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEA/1oGQIu5D87deIuvZxFY +/0CtfG0/p1nPJJnE3LknYX8wBQYDK2VwA0EAzd0/6m2C4Aw8vBl30r4Ak3cCWFnG +cEw3lUWNbOWUl74sP6S9DB4WNiHWnmUxk0/s4DQesZcWRyqJGeULoPPiBQ== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/ca.cnf b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/ca.pubkey.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..6c4475f7d --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEA/1oGQIu5D87deIuvZxFY/0CtfG0/p1nPJJnE3LknYX8= +-----END PUBLIC KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/metadata.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..6f51ddde9 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 4FCF4C53E1B5B83D3471C137CD515B0521570F518D872A2D15CC8261D4F959E2 +mainPublicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.cnf b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..bca7ca6a2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQApLxx1Qjk2wONMrjanToVpxCCLTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNFoXDTIyMDczMDExMDQzNFowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAE/PTFPhtbg9NHHBN81RWwUhVw9RjYcq +LRXMgmHU+VniMAUGAytlcANBAP/nVzYCGInDUKebXuzhawPNdwi20rk5+SbRS/6I +nCz0x0gVciK73HDjijtP3ikF2mlwd8Ows9HWfi9E7ibLoQw= +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.csr.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..b9f8ae67f --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAE/PTFPhtbg9NHHB +N81RWwUhVw9RjYcqLRXMgmHU+VnioAAwBQYDK2VwA0EACXPS5TGlpnf6F8MYwFqC +7sNRh44JAjlGMZ2Z9wQ17d5AHkkTkprfTQSCYNVuTU3pKFiaxK8sFLywDxUMfWvS +AA== +-----END CERTIFICATE REQUEST----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.full.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..126db4d54 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQApLxx1Qjk2wONMrjanToVpxCCLTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNFoXDTIyMDczMDExMDQzNFowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAE/PTFPhtbg9NHHBN81RWwUhVw9RjYcq +LRXMgmHU+VniMAUGAytlcANBAP/nVzYCGInDUKebXuzhawPNdwi20rk5+SbRS/6I +nCz0x0gVciK73HDjijtP3ikF2mlwd8Ows9HWfi9E7ibLoQw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQFLwQjKDOE+Kx74V5CyncrK67I8TAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNFoXDTQxMDcxNTExMDQzNFowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEA/1oGQIu5D87deIuvZxFY +/0CtfG0/p1nPJJnE3LknYX8wBQYDK2VwA0EAzd0/6m2C4Aw8vBl30r4Ak3cCWFnG +cEw3lUWNbOWUl74sP6S9DB4WNiHWnmUxk0/s4DQesZcWRyqJGeULoPPiBQ== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.key.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..6dc0632c6 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEICdPWYMfPo3cUgMyOqi8XMgBuZlNT2bVHATn2Q6G6AFE +-----END PRIVATE KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-database.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-finalization.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-harvesting.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..52286375a --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 2BE1D4BE6DAA63C254C9D232DD901B04B45EC2317428FE0E3D2C000AE2D12C76 +harvesterVrfPrivateKey = F88DFE368E27967CF49EDF971B6045DCCDC748E7B3C3E45AC38D02DD4F3CE82A + +enableAutoHarvesting = true +maxUnlockedAccounts = 10 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = PC32C4YFJVQTE74DS5D5O4GARKVQYO2CBILMXLQ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-inflation.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-logging-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-messaging.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..94aa29108 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = testprefix-dual-001.mytest.com +friendlyName = testprefix-dual-001 +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-pt.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-task.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-timesync.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-user.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/peers-api.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..523e2b7ba --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,38 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F", + "endpoint": { + "host": "testprefix-dual-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF", + "endpoint": { + "host": "testprefix-dual-002.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411", + "endpoint": { + "host": "testprefix-demo-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-demo-001", + "roles": "Api,Peer" + } + } + ] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/peers-p2p.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/votingkeys/private_key_tree1.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..5dbce34a9 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/nodes/node/votingkeys/private_key_tree1.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/preset.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/preset.yml new file mode 100644 index 000000000..643d70401 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-001/target/preset.yml @@ -0,0 +1,730 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1626575785s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 10 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: My Private Test Network +baseNamespace: pirate +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +harvestNetworkFeeSinkAddress: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I +namespaceRentalFeeSinkAddress: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +mosaicRentalFeeSinkAddress: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +nemesisSignerPublicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +networkType: 120 +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +nemesis: + referenceOnly: true + mosaics: + - + name: gold + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nemesisSeedFolder: nemesis-seed +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +knownRestGateways: + - 'http://testprefix-dual-001.mytest.com:3000' + - 'http://testprefix-dual-002.mytest.com:3000' + - 'http://testprefix-demo-001.mytest.com:3000' +knownPeers: + api-node: + - + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + endpoint: + host: testprefix-dual-001.mytest.com + port: 7900 + metadata: + name: testprefix-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + endpoint: + host: testprefix-dual-002.mytest.com + port: 7900 + metadata: + name: testprefix-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + endpoint: + host: testprefix-demo-001.mytest.com + port: 7900 + metadata: + name: testprefix-demo-001 + roles: 'Api,Peer' + peer-node: [] +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' + friendlyName: testprefix-dual-001 + host: testprefix-dual-001.mytest.com + voting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN_TRANSPORT +version: 1 +preset: custom-network-preset.yml +assembly: dual +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: testprefix-dual-001 + host: testprefix-dual-001.mytest.com + voting: true + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + nemesisSeedFolder: nemesis-seed +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: private +networkName: private +currencyMosaicId: 4DAEC93E2FAD68E2 +harvestingMosaicId: 4DAEC93E2FAD68E2 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/custom-network-preset.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/custom-network-preset.yml new file mode 100644 index 000000000..fe3b63ebd --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/custom-network-preset.yml @@ -0,0 +1,518 @@ +networkDescription: My Private Test Network +baseNamespace: pirate +batchVerificationRandomSource: /dev/urandom +harvestBeneficiaryPercentage: 25 +epochAdjustment: 1626575785s +enableRevoteOnBoot: false +maxHarvesterBalance: 50000000000000 +maxMosaicAtomicUnits: 8999999999000000 +minHarvesterBalance: 10000000000 +minVoterBalance: 3000000000000 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +harvestNetworkFeeSinkAddress: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I +namespaceRentalFeeSinkAddress: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +mosaicRentalFeeSinkAddress: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +nemesisSignerPublicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +networkType: 120 +totalChainImportance: 7842928625000000 +initialCurrencyAtomicUnits: 7842928625000000 +importanceGrouping: 720 +votingSetGrouping: 1440 +minVotingKeyLifetime: 112 +maxVotingKeyLifetime: 360 +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +stepDuration: 5m +maxBlockFutureTime: 300ms +maxAccountRestrictionValues: 100 +maxSecretLockDuration: 365d +maxNamespaceDuration: 1825d +minNamespaceDuration: 30d +namespaceGracePeriodDuration: 30d +blockGenerationTargetTime: 30s +defaultDynamicFeeMultiplier: 100 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +mosaicRentalFee: 500000 +throttlingBurst: 80 +throttlingRate: 60 +fileDatabaseBatchSize: 100 +minProofSize: 0 +syncTimeout: 5m +maxChildNamespaces: 100 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +timeSynchronizationMinImportance: 10000000000 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +nemesis: + referenceOnly: true + mosaics: + - + name: gold + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nemesisSeedFolder: nemesis-seed +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +knownRestGateways: + - 'http://testprefix-dual-001.mytest.com:3000' + - 'http://testprefix-dual-002.mytest.com:3000' + - 'http://testprefix-demo-001.mytest.com:3000' +knownPeers: + api-node: + - + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + endpoint: + host: testprefix-dual-001.mytest.com + port: 7900 + metadata: + name: testprefix-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + endpoint: + host: testprefix-dual-002.mytest.com + port: 7900 + metadata: + name: testprefix-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + endpoint: + host: testprefix-demo-001.mytest.com + port: 7900 + metadata: + name: testprefix-demo-001 + roles: 'Api,Peer' + peer-node: [] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/custom-preset.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/custom-preset.yml new file mode 100644 index 000000000..a4d43e833 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/custom-preset.yml @@ -0,0 +1,10 @@ +privateKeySecurityMode: PROMPT_MAIN_TRANSPORT +nodes: + - + friendlyName: testprefix-dual-002 + host: testprefix-dual-002.mytest.com + voting: true + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false +nemesisSeedFolder: nemesis-seed diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/00001.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/00001.dat new file mode 100644 index 000000000..2b710b43c Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/00001.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/00001.proof b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/00001.proof new file mode 100644 index 000000000..f7c5365ed Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/00001.proof differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/00001.stmt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/00001.stmt new file mode 100644 index 000000000..fbb5e44ff Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/00001.stmt differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/hashes.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/hashes.dat new file mode 100644 index 000000000..ba7a0832b Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/hashes.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/proof.heights.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/00000/proof.heights.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/proof.index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/proof.index.dat new file mode 100644 index 000000000..87159da17 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/proof.index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/summary.txt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/summary.txt new file mode 100644 index 000000000..b41684d8b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/nemesis-seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 5 + Voting Count: 2 + Voting Balance: 6000000000000 +* + Generation Hash: D43808D5F3FDA9AC541CCB75F00F7077202787C4DA7867BF06AB37B1D7B4EA0C +Transactions Hash: 532DCBAA6DFC0DF8D997B61DD899E6E6399405AC9FC6383082B9800FACE9AD4D + Receipts Hash: 29D0679D001DAD260D91725998750299EE34850E79F96802E02604D39575990F + State Hash: ABAA4C012E97BFAADC4A73083A49C6ECE5C34FBA4706FF1DE8E447665B6C86D9 +--- Components (9) --- + + BF2BA38A71F170717F4E35D6BF7F2865F8F7EB1F9E7B9B5E248C89A3D7ED68C2 + + 3D01A4ABB500C7F4B5C20FCED627B9D207A29A27E45E40A9D128540EDC651C8B + + 68E7709CF7470282A40B1CA255DFED6B9C762F29B77B1DAC3C25A7C058143B75 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/addresses.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/addresses.yml new file mode 100644 index 000000000..7dd497c32 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/addresses.yml @@ -0,0 +1,28 @@ +version: 2 +networkType: 120 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +nodes: + - + name: node + friendlyName: testprefix-dual-002 + roles: 'Peer,Api,Voting' + main: + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + address: PBTPFLC4CEMABBIPQ3FEXBTBC7C346M4IDVZUBQ + transport: + publicKey: 19D38D98E823639C9A4CB4D2F2CC47A73809C75879B7C3E4F5948303ACBAA442 + address: PDSLXRVHILNOYLDKLEPKE73Y4AISZQM55WQLXCY + remote: + privateKey: 9C2E609D28364AB1A2EA180B617355E4BE52E5B266CD119EA5018CCB5CD2311C + publicKey: E62E9082B3434D3B7830A450A6FFAAF099B0A8034738C23D0FC609AE8BC59326 + address: PCAAYTZYEKAV7VV5SJCFG5L2AZAJP3HCY6KU2BA + vrf: + privateKey: 5691E8282EB4515126730C0DDF6AE3CA252006611507B67CB65BA66AA0AF5797 + publicKey: 6DBAF259008F75ECE41EB1EDB70919D211127C681D9BFEAD6080CCC5A460D821 + address: PB343QLIW7J5VMPKDVRFIDW743UEGLRROLR2T7A + voting: + - + publicKey: 06FD116F1F0EF27C2946C9683C10129BFE4406441C9E94F5D97224DC12631B60 + startEpoch: 1 + endEpoch: 360 + filename: private_key_tree1.dat diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/docker-compose.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/docker-compose.yml new file mode 100644 index 000000000..b208a7b1a --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/docker-compose.yml @@ -0,0 +1,73 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - testprefix-dual-002.mytest.com + hostname: testprefix-dual-002.mytest.com + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/explorer/run.sh b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/mongoDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/server/start.sh b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..f434335b0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ9usgmoFmIPE/S/DngcITJhOjRUTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNVoXDTQxMDcxNTExMDQzNVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAWPJOZkUnGB1GwZcI7FI7 +p5dEM3HiJfx8tUaCse3o098wBQYDK2VwA0EAD0/xRYQGMv8wJhVvag1+nd4GMYEQ +PXpP1Rm7jdhOh20lSqoxqWHPnKQ78LMhslfm3Ay2jbj144hd/b95cPjLCg== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..786ced8d2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQA+qZaWE7tgZXVpLg5a1iZT3u4eTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNVoXDTIyMDczMDExMDQzNVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhABnTjZjoI2Ocmky00vLMR6c4CcdYebfD +5PWUgwOsuqRCMAUGAytlcANBAPHHnTj/SxLFDJJlhS5FqTz8P59m0ul5a3wuxqRU +JKP+83v2rxRNZ6HtMGhw1oT16qWmgcQS5v9AUpY5HwZ8Hgw= +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..54d6441c6 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIFEQc/Zx+PtU1NKd7KX53l2gbNWgud6EGVa1oSK9hlKe +-----END PRIVATE KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..dce876c5d --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = testprefix-dual-002.mytest.com +friendlyName = testprefix-dual-002 +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/rest.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..9bfc358ec --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "private", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/00001.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..2b710b43c Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/00001.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/00001.proof b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..f7c5365ed Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/00001.proof differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/00001.stmt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..fbb5e44ff Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/hashes.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..ba7a0832b Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/proof.heights.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/proof.index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..87159da17 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/proof.index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/summary.txt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/summary.txt new file mode 100644 index 000000000..b41684d8b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 5 + Voting Count: 2 + Voting Balance: 6000000000000 +* + Generation Hash: D43808D5F3FDA9AC541CCB75F00F7077202787C4DA7867BF06AB37B1D7B4EA0C +Transactions Hash: 532DCBAA6DFC0DF8D997B61DD899E6E6399405AC9FC6383082B9800FACE9AD4D + Receipts Hash: 29D0679D001DAD260D91725998750299EE34850E79F96802E02604D39575990F + State Hash: ABAA4C012E97BFAADC4A73083A49C6ECE5C34FBA4706FF1DE8E447665B6C86D9 +--- Components (9) --- + + BF2BA38A71F170717F4E35D6BF7F2865F8F7EB1F9E7B9B5E248C89A3D7ED68C2 + + 3D01A4ABB500C7F4B5C20FCED627B9D207A29A27E45E40A9D128540EDC651C8B + + 68E7709CF7470282A40B1CA255DFED6B9C762F29B77B1DAC3C25A7C058143B75 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-database.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-finalization.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..66e0d1add --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 9C2E609D28364AB1A2EA180B617355E4BE52E5B266CD119EA5018CCB5CD2311C +harvesterVrfPrivateKey = 5691E8282EB4515126730C0DDF6AE3CA252006611507B67CB65BA66AA0AF5797 + +enableAutoHarvesting = true +maxUnlockedAccounts = 10 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = PBTPFLC4CEMABBIPQ3FEXBTBC7C346M4IDVZUBQ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-inflation.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-messaging.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..dce876c5d --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = testprefix-dual-002.mytest.com +friendlyName = testprefix-dual-002 +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-pt.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-task.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-timesync.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-user.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/peers-api.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..523e2b7ba --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,38 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F", + "endpoint": { + "host": "testprefix-dual-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF", + "endpoint": { + "host": "testprefix-dual-002.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411", + "endpoint": { + "host": "testprefix-demo-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-demo-001", + "roles": "Api,Peer" + } + } + ] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/peers-p2p.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/ca.cert.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..f434335b0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ9usgmoFmIPE/S/DngcITJhOjRUTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNVoXDTQxMDcxNTExMDQzNVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAWPJOZkUnGB1GwZcI7FI7 +p5dEM3HiJfx8tUaCse3o098wBQYDK2VwA0EAD0/xRYQGMv8wJhVvag1+nd4GMYEQ +PXpP1Rm7jdhOh20lSqoxqWHPnKQ78LMhslfm3Ay2jbj144hd/b95cPjLCg== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/ca.cnf b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/ca.pubkey.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..6735ed903 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAWPJOZkUnGB1GwZcI7FI7p5dEM3HiJfx8tUaCse3o098= +-----END PUBLIC KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/metadata.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..36695b6f9 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 19D38D98E823639C9A4CB4D2F2CC47A73809C75879B7C3E4F5948303ACBAA442 +mainPublicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.cnf b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..786ced8d2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQA+qZaWE7tgZXVpLg5a1iZT3u4eTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNVoXDTIyMDczMDExMDQzNVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhABnTjZjoI2Ocmky00vLMR6c4CcdYebfD +5PWUgwOsuqRCMAUGAytlcANBAPHHnTj/SxLFDJJlhS5FqTz8P59m0ul5a3wuxqRU +JKP+83v2rxRNZ6HtMGhw1oT16qWmgcQS5v9AUpY5HwZ8Hgw= +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.csr.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..6943aa614 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhABnTjZjoI2Ocmky0 +0vLMR6c4CcdYebfD5PWUgwOsuqRCoAAwBQYDK2VwA0EAQwzvUPZUfk5KgsyG75Bx +TZUNo/WildEDtM+EWok/0LbEVxwyhTQENYRw0bCQUbg5bdRm/GYNN8aDCcBnIaEV +CQ== +-----END CERTIFICATE REQUEST----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.full.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..fd24eb3db --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHgMIGTAhQA+qZaWE7tgZXVpLg5a1iZT3u4eTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNVoXDTIyMDczMDExMDQzNVowDzEN +MAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhABnTjZjoI2Ocmky00vLMR6c4CcdYebfD +5PWUgwOsuqRCMAUGAytlcANBAPHHnTj/SxLFDJJlhS5FqTz8P59m0ul5a3wuxqRU +JKP+83v2rxRNZ6HtMGhw1oT16qWmgcQS5v9AUpY5HwZ8Hgw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQ9usgmoFmIPE/S/DngcITJhOjRUTAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNVoXDTQxMDcxNTExMDQzNVowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEAWPJOZkUnGB1GwZcI7FI7 +p5dEM3HiJfx8tUaCse3o098wBQYDK2VwA0EAD0/xRYQGMv8wJhVvag1+nd4GMYEQ +PXpP1Rm7jdhOh20lSqoxqWHPnKQ78LMhslfm3Ay2jbj144hd/b95cPjLCg== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.key.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..54d6441c6 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIFEQc/Zx+PtU1NKd7KX53l2gbNWgud6EGVa1oSK9hlKe +-----END PRIVATE KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-database.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-finalization.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..06e1871e8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = true +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 0m diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-harvesting.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..66e0d1add --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = 9C2E609D28364AB1A2EA180B617355E4BE52E5B266CD119EA5018CCB5CD2311C +harvesterVrfPrivateKey = 5691E8282EB4515126730C0DDF6AE3CA252006611507B67CB65BA66AA0AF5797 + +enableAutoHarvesting = true +maxUnlockedAccounts = 10 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = PBTPFLC4CEMABBIPQ3FEXBTBC7C346M4IDVZUBQ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-inflation.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-logging-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-messaging.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..dce876c5d --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = testprefix-dual-002.mytest.com +friendlyName = testprefix-dual-002 +version = 1.0.1.0 +roles = Peer,Api,Voting + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-pt.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-task.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-timesync.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-user.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/peers-api.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..523e2b7ba --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,38 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F", + "endpoint": { + "host": "testprefix-dual-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF", + "endpoint": { + "host": "testprefix-dual-002.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411", + "endpoint": { + "host": "testprefix-demo-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-demo-001", + "roles": "Api,Peer" + } + } + ] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/peers-p2p.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/votingkeys/private_key_tree1.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/votingkeys/private_key_tree1.dat new file mode 100644 index 000000000..bef682cb7 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/nodes/node/votingkeys/private_key_tree1.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/preset.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/preset.yml new file mode 100644 index 000000000..5b6ade7f7 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-002/target/preset.yml @@ -0,0 +1,730 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1626575785s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 10 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: My Private Test Network +baseNamespace: pirate +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +harvestNetworkFeeSinkAddress: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I +namespaceRentalFeeSinkAddress: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +mosaicRentalFeeSinkAddress: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +nemesisSignerPublicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +networkType: 120 +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +nemesis: + referenceOnly: true + mosaics: + - + name: gold + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nemesisSeedFolder: nemesis-seed +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +knownRestGateways: + - 'http://testprefix-dual-001.mytest.com:3000' + - 'http://testprefix-dual-002.mytest.com:3000' + - 'http://testprefix-demo-001.mytest.com:3000' +knownPeers: + api-node: + - + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + endpoint: + host: testprefix-dual-001.mytest.com + port: 7900 + metadata: + name: testprefix-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + endpoint: + host: testprefix-dual-002.mytest.com + port: 7900 + metadata: + name: testprefix-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + endpoint: + host: testprefix-demo-001.mytest.com + port: 7900 + metadata: + name: testprefix-demo-001 + roles: 'Api,Peer' + peer-node: [] +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' + friendlyName: testprefix-dual-002 + host: testprefix-dual-002.mytest.com + voting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +privateKeySecurityMode: PROMPT_MAIN_TRANSPORT +version: 1 +preset: custom-network-preset.yml +assembly: dual +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: testprefix-dual-002 + host: testprefix-dual-002.mytest.com + voting: true + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + nemesisSeedFolder: nemesis-seed +explorers: [] +wallets: [] +faucets: [] +networkIdentifier: private +networkName: private +currencyMosaicId: 4DAEC93E2FAD68E2 +harvestingMosaicId: 4DAEC93E2FAD68E2 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/custom-network-preset.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/custom-network-preset.yml new file mode 100644 index 000000000..fe3b63ebd --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/custom-network-preset.yml @@ -0,0 +1,518 @@ +networkDescription: My Private Test Network +baseNamespace: pirate +batchVerificationRandomSource: /dev/urandom +harvestBeneficiaryPercentage: 25 +epochAdjustment: 1626575785s +enableRevoteOnBoot: false +maxHarvesterBalance: 50000000000000 +maxMosaicAtomicUnits: 8999999999000000 +minHarvesterBalance: 10000000000 +minVoterBalance: 3000000000000 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +harvestNetworkFeeSinkAddress: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I +namespaceRentalFeeSinkAddress: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +mosaicRentalFeeSinkAddress: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +nemesisSignerPublicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +networkType: 120 +totalChainImportance: 7842928625000000 +initialCurrencyAtomicUnits: 7842928625000000 +importanceGrouping: 720 +votingSetGrouping: 1440 +minVotingKeyLifetime: 112 +maxVotingKeyLifetime: 360 +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +stepDuration: 5m +maxBlockFutureTime: 300ms +maxAccountRestrictionValues: 100 +maxSecretLockDuration: 365d +maxNamespaceDuration: 1825d +minNamespaceDuration: 30d +namespaceGracePeriodDuration: 30d +blockGenerationTargetTime: 30s +defaultDynamicFeeMultiplier: 100 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +mosaicRentalFee: 500000 +throttlingBurst: 80 +throttlingRate: 60 +fileDatabaseBatchSize: 100 +minProofSize: 0 +syncTimeout: 5m +maxChildNamespaces: 100 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +timeSynchronizationMinImportance: 10000000000 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +nemesis: + referenceOnly: true + mosaics: + - + name: gold + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nemesisSeedFolder: nemesis-seed +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +knownRestGateways: + - 'http://testprefix-dual-001.mytest.com:3000' + - 'http://testprefix-dual-002.mytest.com:3000' + - 'http://testprefix-demo-001.mytest.com:3000' +knownPeers: + api-node: + - + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + endpoint: + host: testprefix-dual-001.mytest.com + port: 7900 + metadata: + name: testprefix-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + endpoint: + host: testprefix-dual-002.mytest.com + port: 7900 + metadata: + name: testprefix-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + endpoint: + host: testprefix-demo-001.mytest.com + port: 7900 + metadata: + name: testprefix-demo-001 + roles: 'Api,Peer' + peer-node: [] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/custom-preset.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/custom-preset.yml new file mode 100644 index 000000000..529dd0814 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/custom-preset.yml @@ -0,0 +1,14 @@ +privateKeySecurityMode: PROMPT_MAIN_TRANSPORT +nodes: + - + friendlyName: testprefix-demo-001 + host: testprefix-demo-001.mytest.com + voting: false + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false +faucets: + - + repeat: 1 + privateKey: 000000000000000000000000000000000000000000000000000000000000000D +nemesisSeedFolder: nemesis-seed diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/00001.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/00001.dat new file mode 100644 index 000000000..2b710b43c Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/00001.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/00001.proof b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/00001.proof new file mode 100644 index 000000000..f7c5365ed Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/00001.proof differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/00001.stmt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/00001.stmt new file mode 100644 index 000000000..fbb5e44ff Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/00001.stmt differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/hashes.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/hashes.dat new file mode 100644 index 000000000..ba7a0832b Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/hashes.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/proof.heights.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/00000/proof.heights.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/proof.index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/proof.index.dat new file mode 100644 index 000000000..87159da17 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/proof.index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/summary.txt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/summary.txt new file mode 100644 index 000000000..b41684d8b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/nemesis-seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 5 + Voting Count: 2 + Voting Balance: 6000000000000 +* + Generation Hash: D43808D5F3FDA9AC541CCB75F00F7077202787C4DA7867BF06AB37B1D7B4EA0C +Transactions Hash: 532DCBAA6DFC0DF8D997B61DD899E6E6399405AC9FC6383082B9800FACE9AD4D + Receipts Hash: 29D0679D001DAD260D91725998750299EE34850E79F96802E02604D39575990F + State Hash: ABAA4C012E97BFAADC4A73083A49C6ECE5C34FBA4706FF1DE8E447665B6C86D9 +--- Components (9) --- + + BF2BA38A71F170717F4E35D6BF7F2865F8F7EB1F9E7B9B5E248C89A3D7ED68C2 + + 3D01A4ABB500C7F4B5C20FCED627B9D207A29A27E45E40A9D128540EDC651C8B + + 68E7709CF7470282A40B1CA255DFED6B9C762F29B77B1DAC3C25A7C058143B75 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/addresses.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/addresses.yml new file mode 100644 index 000000000..f96196826 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/addresses.yml @@ -0,0 +1,28 @@ +version: 2 +networkType: 120 +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +nodes: + - + name: node + friendlyName: testprefix-demo-001 + roles: 'Peer,Api' + main: + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + address: PC6AHZ6XNGT4MNWORDHDXFJOCYUU56UBPZ2IEBY + transport: + publicKey: 80E9EE3CA7BA127A10C53732874B88E749DF63C2F1CC0581CC9D716CFE5C6444 + address: PCNZERL5W7S6PUDIX5KQYYNI7GDKRIRKM4QCYPI + remote: + privateKey: A64BA7C71873EA04D57D8F040FB7BA63B21D17700086D92B1C00CFE7A655AA74 + publicKey: 49F7602F5C0D1C291388FE3F6E7825AD51D4AAD66183BF80A8E3AF2B5E583F07 + address: PDRNWMKM3HLSWS3WVAPET6RKP6BIXI2WUCONMGI + vrf: + privateKey: 72B65B9404C2591E79D6083895BE0DD45F8A9BBD686C1FCF2CBD9F24AFE1E8DD + publicKey: D7B67A71A653068EBF6DE4EA6169D40BF718CD62C47D6BCA32435D4FEEBD7802 + address: PDAZMG7P2CDDCT2DV57OWF45ZFUDNRBYQFHKC7I +faucets: + - + account: + privateKey: 000000000000000000000000000000000000000000000000000000000000000D + publicKey: 3AB9CC26E2E4142E800D629423642F49708B20F8F4EB368195B84EFC64928A67 + address: PCR5TOVHOY6K2YQ2SJWEFQS5RLQA3LP2GNW2AYI diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/docker-compose.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/docker-compose.yml new file mode 100644 index 000000000..43486da8b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/docker-compose.yml @@ -0,0 +1,117 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - testprefix-demo-001.mytest.com + hostname: testprefix-demo-001.mytest.com + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + - '../nemesis/seed:/symbol-workdir/seed:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 + wallet: + container_name: wallet + image: 'symbolplatform/symbol-desktop-wallet:1.0.1' + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '80:80' + restart: 'on-failure:2' + volumes: + - '../wallets/wallet:/usr/share/nginx/html/config:ro' + explorer: + container_name: explorer + image: 'symbolplatform/symbol-explorer:1.1.0-alpha' + entrypoint: ash -c "/bin/ash /symbol-commands/run.sh explorer" + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '90:4000' + restart: 'on-failure:2' + volumes: + - '../explorers/explorer:/symbol-workdir:ro' + - './explorer:/symbol-commands:ro' + faucet: + container_name: faucet + image: 'symbolplatform/symbol-faucet:1.0.1-alpha' + stop_signal: SIGINT + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + NATIVE_CURRENCY_NAME: pirate.gold + FAUCET_PRIVATE_KEY: 000000000000000000000000000000000000000000000000000000000000000D + NATIVE_CURRENCY_ID: 4DAEC93E2FAD68E2 + restart: 'on-failure:2' + ports: + - '100:4000' + depends_on: + - rest-gateway +networks: + default: + ipam: + config: + - + subnet: 172.20.0.0/24 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/explorer/run.sh b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/explorer/run.sh new file mode 100644 index 000000000..668b69193 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/explorer/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Starting explorer $1" +cp default.json /app/src/config/default.json +cd /app +npm start diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/mongoDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/mongoDbPrepare.js new file mode 100644 index 000000000..b52e58a33 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/mongoDbPrepare.js @@ -0,0 +1,91 @@ +(function prepareDbConfiguration() { + db.setProfilingLevel(1, 100); // log slow queries +})(); + +(function prepareDbCollections() { + function makeSparse(propertyName) { + return { partialFilterExpression: { [propertyName]: { $exists: true } } }; + } + + function addCommonTransactionIndexes(collection) { + collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 }); + collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 }); + collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash'))); + collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses')); + collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId')); + } + + function addTransactionCollection(collectionName) { + db.createCollection(collectionName); + addCommonTransactionIndexes(db[collectionName]); + db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash')); + } + + db.createCollection('blocks'); + db.blocks.createIndex({ 'block.signerPublicKey': 1 }); + db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true }); + db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true }); + + db.createCollection('finalizedBlocks'); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 }); + db.finalizedBlocks.createIndex({ 'block.height': -1 }); + db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true }); + + db.createCollection('transactions'); + addCommonTransactionIndexes(db.transactions); + db.transactions.createIndex({ 'meta.height': -1 }); + db.transactions.createIndex({ 'transaction.deadline': -1 }); + db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey')); + db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id')); + + db.createCollection('transactionStatements'); + db.transactionStatements.createIndex( + { 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 }, + { unique: true }, + ); + + ['addressResolutionStatements', 'mosaicResolutionStatements'].forEach((collectionName) => { + db.createCollection(collectionName); + db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true }); + }); + + db.createCollection('accounts'); + db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored + db.accounts.createIndex({ 'account.address': 1 }, { unique: true }); + + ['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection); + + db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 }); + db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true }); + db.transactionStatuses.createIndex({ 'status.deadline': -1 }); +})(); + +(function preparePluginDbCollections() { + const pluginNames = [ + 'LockHash', + 'LockSecret', + 'Metadata', + 'Mosaic', + 'Multisig', + 'Namespace', + 'RestrictionAccount', + 'RestrictionMosaic', + ]; + pluginNames.forEach((pluginName) => { + const scriptPath = `${pwd()}/scripts/mongo${pluginName}DbPrepare.js`; + print(`Loading ${pluginName} from ${scriptPath}`); + load(scriptPath); + }); +})(); + +(function printCollectionIndexes() { + db.getCollectionNames().forEach((collectionName) => { + print(`===== ${collectionName} INDEXES =====`); + db[collectionName].getIndexes().forEach((index) => { + printjson(index.key); + }); + }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoLockHashDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoLockHashDbPrepare.js new file mode 100644 index 000000000..bd0c70c40 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoLockHashDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareHashLockCollections() { + db.createCollection('hashLocks'); + db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true }); + db.hashLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoLockSecretDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoLockSecretDbPrepare.js new file mode 100644 index 000000000..04beac72b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoLockSecretDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareSecretLockCollections() { + db.createCollection('secretLocks'); + db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true }); + db.secretLocks.createIndex({ 'lock.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoMetadataDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoMetadataDbPrepare.js new file mode 100644 index 000000000..b997bb91c --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoMetadataDbPrepare.js @@ -0,0 +1,6 @@ +(function prepareMetadataCollections() { + db.createCollection('metadata'); + db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true }); + db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); + db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoMosaicDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoMosaicDbPrepare.js new file mode 100644 index 000000000..3046fc9dc --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoMosaicDbPrepare.js @@ -0,0 +1,5 @@ +(function prepareMosaicCollections() { + db.createCollection('mosaics'); + db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true }); + db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoMultisigDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoMultisigDbPrepare.js new file mode 100644 index 000000000..079359831 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoMultisigDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareMultisigCollections() { + db.createCollection('multisigs'); + db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoNamespaceDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoNamespaceDbPrepare.js new file mode 100644 index 000000000..51f9b1087 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoNamespaceDbPrepare.js @@ -0,0 +1,8 @@ +(function prepareNamespaceCollections() { + db.createCollection('namespaces'); + db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 }); + db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js new file mode 100644 index 000000000..2a74c96e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoRestrictionAccountDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionAccountCollections() { + db.createCollection('accountRestrictions'); + db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js new file mode 100644 index 000000000..3d35e8f91 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/mongo/scripts/mongoRestrictionMosaicDbPrepare.js @@ -0,0 +1,4 @@ +(function prepareRestrictionMosaicCollections() { + db.createCollection('mosaicRestrictions'); + db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true }); +})(); diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/server/start.sh b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/server/start.sh new file mode 100644 index 000000000..d01b95abb --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/docker/server/start.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +function try() +{ + [[ $- = *e* ]]; SAVED_OPT_E=$? + set +e +} + +function throw() +{ + exit $1 +} + +function catch() +{ + export ex_code=$? + (( $SAVED_OPT_E )) && set +e + return $ex_code +} + +catapultAppFolder=$1 +dataDirectory=$2 +application=$3 +theOtherApplication=$4 +mode=$5 +name=$6 +waitForOther=$7 +config="./$application-config" + +echo "RUNNING $application $name $mode" +export LD_LIBRARY_PATH=$catapultAppFolder/lib:$catapultAppFolder/deps + +ulimit -c unlimited +umask 077 + +rm -f "$dataDirectory/$application.started" +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$mode" == "DEBUG" ]; then + echo "Setting up core dump..." + mkdir -p ./logs + echo "./logs/$application.%e.%t" >/proc/sys/kernel/core_pattern +fi + +otherApplicationRecoveryFile="$dataDirectory/$theOtherApplication-recovery.started" +while [ -f $otherApplicationRecoveryFile ] ; +do + echo "Waiting for $theOtherApplication recovery to finish" + sleep 1 +done + + +if [ -e "$dataDirectory/$application.lock" ]; then + echo "!!!! Have lock file present, going to run recovery in $application mode...." + + touch "$dataDirectory/$application-recovery.started" + + while [ -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to exit" + sleep 1 + done + + try +( + set -e + $catapultAppFolder/bin/catapult.recovery "$config" + echo "!!!! Finished running recovery, should be moving on to start $application..." +) +# directly after closing the subshell you need to connect a group to the catch using || +catch || { + echo "!!!! $application recovery has CRASHED!" + rm -f "$dataDirectory/$application-recovery.started" + throw $ex_code # you can rethrow the "exception" causing the script to exit if not caught +} +fi + +rm -f "$dataDirectory/$application-recovery.started" + +if [ "$waitForOther" == "true" ]; then + while [ ! -f "$dataDirectory/$theOtherApplication.started" ] ; + do + echo "Waiting for $theOtherApplication to start" + sleep 1 + done +fi + +touch "$dataDirectory/$application.started" + +processName="catapult.$application" +echo "!!!! Starting $application...." +$catapultAppFolder/bin/$processName "$config" & +export applicationPid=$! + +cleanup() { + echo "Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus +} + +#Trap SIGTERM +trap 'cleanup' SIGTERM SIGINT + +while sleep 5; do + ps aux |grep $processName |grep -q -v grep + processStatus=$? + if [ $processStatus -ne 0 ]; then + echo "The process $processName has already exited." + wait $applicationPid + exitStatus=$? + rm -f "./data/$application.started" + exit $exitStatus + fi + + if [ -e $otherApplicationRecoveryFile ]; then + echo "Other process waiting for recovery. Shutting down $application" + kill -s SIGTERM $applicationPid + wait $applicationPid + rm -f "./data/$application.started" + exit 1 + fi +done diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/explorers/explorer/default.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/explorers/explorer/default.json new file mode 100644 index 000000000..e606c32ef --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/explorers/explorer/default.json @@ -0,0 +1,54 @@ +{ + "peersApi": { + "defaultNode": "http://testprefix-demo-001.mytest.com:3000", + "nodes": [ + "http://testprefix-demo-001.mytest.com:3000", + "http://testprefix-dual-001.mytest.com:3000", + "http://testprefix-dual-002.mytest.com:3000" + ] + }, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "pirate.gold", + "mosaicId": "4DAEC93E2FAD68E2", + "divisibility": "6", + "namespaceId": "F95F28D0A03774E5", + "networkIdentifier": 120 + }, + "footer": { + "link": [ + { + "href": "https://nemflash.io/", + "text": "NEM News", + "icon": "IconNewspaper" + }, + { + "href": "https://forum.nem.io/", + "text": "Forum", + "icon": "IconForum" + }, + { + "href": "https://t.me/nemred", + "text": "Telegram", + "icon": "IconTelegram" + }, + { + "href": "https://www.reddit.com/r/nem/", + "text": "Reddit", + "icon": "IconReddit" + }, + { + "href": "https://github.com/nemtech", + "text": "Github", + "icon": "IconGithub" + }, + { + "href": "http://localhost:100/", + "text": "Faucet", + "icon": "IconHomeCurrencyUsd" + } + ] + } +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem new file mode 100644 index 000000000..b36fdcc09 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQK2L/jfuHyh9OziUf5PE/4zezVHDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNloXDTQxMDcxNTExMDQzNlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEA45rE4RTqQpmg+Rac+MwD +mjRYYq66MZYW5htZWlS5BBEwBQYDK2VwA0EADl1PCJAyjPJoug3EQO0gBAkG2uPW +JipMnYrYvKDEBmajPMGF2BxXnvPtTxLhg8ffuKHoofqfhNcJUXH1+iYOAQ== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/cert/node.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/cert/node.crt.pem new file mode 100644 index 000000000..a48c74e38 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMg76084bkAB4IbXNrrLXg03+FAMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzIwMTEwNDM2WhcNMjIwNzMwMTEwNDM2WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAgOnuPKe6EnoQxTcyh0uI50nfY8LxzAWB +zJ1xbP5cZEQwBQYDK2VwA0EAT2Zzf+p1NvRKaAszMmWc6ceHvjsHbAm5DPpfLkhD +Kj8YUveR+lGasfPpGz3SLsrmmVbCwqMjhRndx534fvUNCg== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/cert/node.key.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/cert/node.key.pem new file mode 100644 index 000000000..c8ca4b52a --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIGk30LNkoiee+goYjD0GTn3zyiK4OYjtNrS2nE+azpuG +-----END PRIVATE KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/config-node.properties new file mode 100644 index 000000000..c62d709a5 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/api-node-config/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = testprefix-demo-001.mytest.com +friendlyName = testprefix-demo-001 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/rest.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/rest.json new file mode 100644 index 000000000..9bfc358ec --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/gateways/rest-gateway/rest.json @@ -0,0 +1,92 @@ +{ + "network": { + "name": "private", + "description": "" + }, + "port": 3000, + "crossDomain": { + "allowedHosts": [ + "*" + ], + "allowedMethods": [ + "GET", + "POST", + "PUT", + "OPTIONS" + ] + }, + "extensions": [ + "accountLink", + "aggregate", + "lockHash", + "lockSecret", + "mosaic", + "metadata", + "multisig", + "namespace", + "receipts", + "restrictions", + "transfer", + "cmc" + ], + "db": { + "url": "mongodb://db:27017/", + "name": "catapult", + "pageSizeMin": 10, + "pageSizeMax": 100, + "maxConnectionAttempts": 15, + "baseRetryDelay": 750, + "connectionPoolSize": 10 + }, + "apiNode": { + "host": "node", + "port": 7900, + "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", + "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", + "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", + "timeout": 1000, + "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", + "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" + }, + "websocket": { + "mq": { + "host": "broker", + "port": 7902, + "monitorInterval": 500, + "connectTimeout": 10000, + "monitorLoggingThrottle": 60000, + "maxSubscriptions": 300 + }, + "allowOptionalAddress": true + }, + "throttling": { + "burst": 80, + "rate": 60 + }, + "logging": { + "console": { + "formats": [ + "colorize", + "simple" + ], + "level": "verbose", + "handleExceptions": true + }, + "file": { + "formats": [ + "prettyPrint" + ], + "level": "verbose", + "handleExceptions": true, + "filename": "/symbol-workdir/logs/catapult-rest.log", + "maxsize": 20971520, + "maxFiles": 100 + } + }, + "numBlocksTransactionFeeStats": 300, + "deployment": { + "deploymentTool": "symbol-bootstrap", + "deploymentToolVersion": "1.0.8", + "lastUpdatedDate": "2021-07-05" + } +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/00001.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/00001.dat new file mode 100644 index 000000000..2b710b43c Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/00001.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/00001.proof b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/00001.proof new file mode 100644 index 000000000..f7c5365ed Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/00001.proof differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/00001.stmt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/00001.stmt new file mode 100644 index 000000000..fbb5e44ff Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/00001.stmt differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/hashes.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/hashes.dat new file mode 100644 index 000000000..ba7a0832b Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/hashes.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/proof.heights.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/proof.heights.dat new file mode 100644 index 000000000..01d633b27 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/00000/proof.heights.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/index.dat new file mode 100644 index 000000000..20d5cb86e Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/proof.index.dat b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/proof.index.dat new file mode 100644 index 000000000..87159da17 Binary files /dev/null and b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/proof.index.dat differ diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/summary.txt b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/summary.txt new file mode 100644 index 000000000..b41684d8b --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nemesis/seed/summary.txt @@ -0,0 +1,19 @@ + Height: 1 + Harvesting Count: 5 + Voting Count: 2 + Voting Balance: 6000000000000 +* + Generation Hash: D43808D5F3FDA9AC541CCB75F00F7077202787C4DA7867BF06AB37B1D7B4EA0C +Transactions Hash: 532DCBAA6DFC0DF8D997B61DD899E6E6399405AC9FC6383082B9800FACE9AD4D + Receipts Hash: 29D0679D001DAD260D91725998750299EE34850E79F96802E02604D39575990F + State Hash: ABAA4C012E97BFAADC4A73083A49C6ECE5C34FBA4706FF1DE8E447665B6C86D9 +--- Components (9) --- + + BF2BA38A71F170717F4E35D6BF7F2865F8F7EB1F9E7B9B5E248C89A3D7ED68C2 + + 3D01A4ABB500C7F4B5C20FCED627B9D207A29A27E45E40A9D128540EDC651C8B + + 68E7709CF7470282A40B1CA255DFED6B9C762F29B77B1DAC3C25A7C058143B75 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 + + 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-database.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-extensions-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-extensions-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..d2190a8f0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.filespooling = false +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-extensions-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-finalization.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-harvesting.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-harvesting.properties new file mode 100644 index 000000000..955b98b71 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = A64BA7C71873EA04D57D8F040FB7BA63B21D17700086D92B1C00CFE7A655AA74 +harvesterVrfPrivateKey = 72B65B9404C2591E79D6083895BE0DD45F8A9BBD686C1FCF2CBD9F24AFE1E8DD + +enableAutoHarvesting = true +maxUnlockedAccounts = 10 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = PC6AHZ6XNGT4MNWORDHDXFJOCYUU56UBPZ2IEBY diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-inflation.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-logging-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-logging-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-logging-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-messaging.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-node.properties new file mode 100644 index 000000000..c62d709a5 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = testprefix-demo-001.mytest.com +friendlyName = testprefix-demo-001 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-pt.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-task.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-timesync.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-user.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/peers-api.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/peers-api.json new file mode 100644 index 000000000..523e2b7ba --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/peers-api.json @@ -0,0 +1,38 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F", + "endpoint": { + "host": "testprefix-dual-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF", + "endpoint": { + "host": "testprefix-dual-002.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411", + "endpoint": { + "host": "testprefix-demo-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-demo-001", + "roles": "Api,Peer" + } + } + ] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/peers-p2p.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/broker-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/ca.cert.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/ca.cert.pem new file mode 100644 index 000000000..b36fdcc09 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/ca.cert.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQK2L/jfuHyh9OziUf5PE/4zezVHDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNloXDTQxMDcxNTExMDQzNlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEA45rE4RTqQpmg+Rac+MwD +mjRYYq66MZYW5htZWlS5BBEwBQYDK2VwA0EADl1PCJAyjPJoug3EQO0gBAkG2uPW +JipMnYrYvKDEBmajPMGF2BxXnvPtTxLhg8ffuKHoofqfhNcJUXH1+iYOAQ== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/ca.cnf b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/ca.cnf new file mode 100644 index 000000000..2cee3d582 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/ca.cnf @@ -0,0 +1,22 @@ +[ca] +default_ca = CA_default + +[CA_default] +new_certs_dir = ./new_certs +database = index.txt +serial = serial.dat + +private_key = ca.key.pem +certificate = ca.cert.pem + +policy = policy_catapult + +[policy_catapult] +commonName = supplied + +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node-account diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/ca.pubkey.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/ca.pubkey.pem new file mode 100644 index 000000000..96598bee4 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/ca.pubkey.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEA45rE4RTqQpmg+Rac+MwDmjRYYq66MZYW5htZWlS5BBE= +-----END PUBLIC KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/metadata.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/metadata.yml new file mode 100644 index 000000000..efec15c9e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/metadata.yml @@ -0,0 +1,3 @@ +version: 1 +transportPublicKey: 80E9EE3CA7BA127A10C53732874B88E749DF63C2F1CC0581CC9D716CFE5C6444 +mainPublicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.cnf b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.cnf new file mode 100644 index 000000000..495894e95 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.cnf @@ -0,0 +1,7 @@ +[req] +prompt = no +distinguished_name = dn + +[dn] +CN = node + diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.crt.pem new file mode 100644 index 000000000..a48c74e38 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.crt.pem @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMg76084bkAB4IbXNrrLXg03+FAMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzIwMTEwNDM2WhcNMjIwNzMwMTEwNDM2WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAgOnuPKe6EnoQxTcyh0uI50nfY8LxzAWB +zJ1xbP5cZEQwBQYDK2VwA0EAT2Zzf+p1NvRKaAszMmWc6ceHvjsHbAm5DPpfLkhD +Kj8YUveR+lGasfPpGz3SLsrmmVbCwqMjhRndx534fvUNCg== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.csr.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.csr.pem new file mode 100644 index 000000000..679c00d0d --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.csr.pem @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIGOMEICAQAwDzENMAsGA1UEAwwEbm9kZTAqMAUGAytlcAMhAIDp7jynuhJ6EMU3 +ModLiOdJ32PC8cwFgcydcWz+XGREoAAwBQYDK2VwA0EADnCNKi5NJ0dzDDGMePBw +Qdt/nLs4tlbAqpfqYNhoJQiCXqYdq9teqndBJHpa+XB3AUFDhf4hu3fAAQig5grW +CA== +-----END CERTIFICATE REQUEST----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.full.crt.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.full.crt.pem new file mode 100644 index 000000000..4a97e595a --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.full.crt.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIHfMIGSAhMg76084bkAB4IbXNrrLXg03+FAMAUGAytlcDAXMRUwEwYDVQQDDAxu +b2RlLWFjY291bnQwHhcNMjEwNzIwMTEwNDM2WhcNMjIwNzMwMTEwNDM2WjAPMQ0w +CwYDVQQDDARub2RlMCowBQYDK2VwAyEAgOnuPKe6EnoQxTcyh0uI50nfY8LxzAWB +zJ1xbP5cZEQwBQYDK2VwA0EAT2Zzf+p1NvRKaAszMmWc6ceHvjsHbAm5DPpfLkhD +Kj8YUveR+lGasfPpGz3SLsrmmVbCwqMjhRndx534fvUNCg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIHoMIGbAhQK2L/jfuHyh9OziUf5PE/4zezVHDAFBgMrZXAwFzEVMBMGA1UEAwwM +bm9kZS1hY2NvdW50MB4XDTIxMDcyMDExMDQzNloXDTQxMDcxNTExMDQzNlowFzEV +MBMGA1UEAwwMbm9kZS1hY2NvdW50MCowBQYDK2VwAyEA45rE4RTqQpmg+Rac+MwD +mjRYYq66MZYW5htZWlS5BBEwBQYDK2VwA0EADl1PCJAyjPJoug3EQO0gBAkG2uPW +JipMnYrYvKDEBmajPMGF2BxXnvPtTxLhg8ffuKHoofqfhNcJUXH1+iYOAQ== +-----END CERTIFICATE----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.key.pem b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.key.pem new file mode 100644 index 000000000..c8ca4b52a --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/cert/node.key.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIGk30LNkoiee+goYjD0GTn3zyiK4OYjtNrS2nE+azpuG +-----END PRIVATE KEY----- diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-database.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-database.properties new file mode 100644 index 000000000..2753cd3c0 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-database.properties @@ -0,0 +1,21 @@ +[database] + +databaseUri = mongodb://db:27017 +databaseName = catapult +maxWriterThreads = 8 +maxDropBatchSize = 10 +writeTimeout = 10m + +[plugins] + +catapult.mongo.plugins.accountlink = true +catapult.mongo.plugins.aggregate = true +catapult.mongo.plugins.lockhash = true +catapult.mongo.plugins.locksecret = true +catapult.mongo.plugins.metadata = true +catapult.mongo.plugins.mosaic = true +catapult.mongo.plugins.multisig = true +catapult.mongo.plugins.namespace = true +catapult.mongo.plugins.restrictionaccount = true +catapult.mongo.plugins.restrictionmosaic = true +catapult.mongo.plugins.transfer = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-extensions-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-extensions-broker.properties new file mode 100644 index 000000000..2772cbc37 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-extensions-broker.properties @@ -0,0 +1,8 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = true +extension.mongo = true +extension.zeromq = true + +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-extensions-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-extensions-recovery.properties new file mode 100644 index 000000000..c0a06b139 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-extensions-recovery.properties @@ -0,0 +1,9 @@ +[extensions] + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +extension.filespooling = true +extension.hashcache = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-extensions-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-extensions-server.properties new file mode 100644 index 000000000..8d4ba83e2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-extensions-server.properties @@ -0,0 +1,27 @@ +[extensions] + +# api extensions +extension.filespooling = true +extension.partialtransaction = true + +# addressextraction must be first because mongo and zeromq depend on extracted addresses +extension.addressextraction = false +extension.mongo = false +extension.zeromq = false + +# p2p extensions +extension.harvesting = true +extension.syncsource = true + +# common extensions +extension.diagnostics = true +extension.finalization = true +extension.hashcache = true +extension.networkheight = false +extension.nodediscovery = true +extension.packetserver = true +extension.pluginhandlers = true +extension.sync = true +extension.timesync = true +extension.transactionsink = true +extension.unbondedpruning = true diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-finalization.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-finalization.properties new file mode 100644 index 000000000..e09d4b5c7 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-finalization.properties @@ -0,0 +1,16 @@ +[finalization] + +enableVoting = false +enableRevoteOnBoot = false + +size = 10'000 +threshold = 7'000 +stepDuration = 5m + +shortLivedCacheMessageDuration = 10m +messageSynchronizationMaxResponseSize = 20MB + +maxHashesPerPoint = 256 +prevoteBlocksMultiple = 4 + +unfinalizedBlocksDuration = 10m diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-harvesting.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-harvesting.properties new file mode 100644 index 000000000..955b98b71 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-harvesting.properties @@ -0,0 +1,9 @@ +[harvesting] + +harvesterSigningPrivateKey = A64BA7C71873EA04D57D8F040FB7BA63B21D17700086D92B1C00CFE7A655AA74 +harvesterVrfPrivateKey = 72B65B9404C2591E79D6083895BE0DD45F8A9BBD686C1FCF2CBD9F24AFE1E8DD + +enableAutoHarvesting = true +maxUnlockedAccounts = 10 +delegatePrioritizationPolicy = Importance +beneficiaryAddress = PC6AHZ6XNGT4MNWORDHDXFJOCYUU56UBPZ2IEBY diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-inflation.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-inflation.properties new file mode 100644 index 000000000..70f91c2e1 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-inflation.properties @@ -0,0 +1,425 @@ +[inflation] + +starting-at-height-2 = 0 +starting-at-height-5760 = 191997042 +starting-at-height-172799 = 183764522 +starting-at-height-435299 = 175884998 +starting-at-height-697799 = 168343336 +starting-at-height-960299 = 161125048 +starting-at-height-1222799 = 154216270 +starting-at-height-1485299 = 147603728 +starting-at-height-1747799 = 141274720 +starting-at-height-2010299 = 135217090 +starting-at-height-2272799 = 129419202 +starting-at-height-2535299 = 123869918 +starting-at-height-2797799 = 118558578 +starting-at-height-3060299 = 113474978 +starting-at-height-3322799 = 108609356 +starting-at-height-3585299 = 103952364 +starting-at-height-3847799 = 99495056 +starting-at-height-4110299 = 95228870 +starting-at-height-4372799 = 91145612 +starting-at-height-4635299 = 87237436 +starting-at-height-4897799 = 83496838 +starting-at-height-5160299 = 79916630 +starting-at-height-5422799 = 76489934 +starting-at-height-5685299 = 73210170 +starting-at-height-5947799 = 70071038 +starting-at-height-6210299 = 67066506 +starting-at-height-6472799 = 64190804 +starting-at-height-6735299 = 61438406 +starting-at-height-6997799 = 58804028 +starting-at-height-7260299 = 56282608 +starting-at-height-7522799 = 53869300 +starting-at-height-7785299 = 51559472 +starting-at-height-8047799 = 49348686 +starting-at-height-8310299 = 47232696 +starting-at-height-8572799 = 45207434 +starting-at-height-8835299 = 43269014 +starting-at-height-9097799 = 41413708 +starting-at-height-9360299 = 39637956 +starting-at-height-9622799 = 37938346 +starting-at-height-9885299 = 36311610 +starting-at-height-10147799 = 34754628 +starting-at-height-10410299 = 33264406 +starting-at-height-10672799 = 31838082 +starting-at-height-10935299 = 30472918 +starting-at-height-11197799 = 29166288 +starting-at-height-11460299 = 27915686 +starting-at-height-11722799 = 26718706 +starting-at-height-11985299 = 25573052 +starting-at-height-12247799 = 24476520 +starting-at-height-12510299 = 23427008 +starting-at-height-12772799 = 22422496 +starting-at-height-13035299 = 21461056 +starting-at-height-13297799 = 20540840 +starting-at-height-13560299 = 19660082 +starting-at-height-13822799 = 18817090 +starting-at-height-14085299 = 18010244 +starting-at-height-14347799 = 17237994 +starting-at-height-14610299 = 16498858 +starting-at-height-14872799 = 15791412 +starting-at-height-15135299 = 15114302 +starting-at-height-15397799 = 14466226 +starting-at-height-15660299 = 13845938 +starting-at-height-15922799 = 13252246 +starting-at-height-16185299 = 12684012 +starting-at-height-16447799 = 12140142 +starting-at-height-16710299 = 11619592 +starting-at-height-16972799 = 11121364 +starting-at-height-17235299 = 10644498 +starting-at-height-17497799 = 10188078 +starting-at-height-17760299 = 9751230 +starting-at-height-18022799 = 9333114 +starting-at-height-18285299 = 8932924 +starting-at-height-18547799 = 8549896 +starting-at-height-18810299 = 8183290 +starting-at-height-19072799 = 7832404 +starting-at-height-19335299 = 7496562 +starting-at-height-19597799 = 7175122 +starting-at-height-19860299 = 6867464 +starting-at-height-20122799 = 6573000 +starting-at-height-20385299 = 6291160 +starting-at-height-20647799 = 6021404 +starting-at-height-20910299 = 5763216 +starting-at-height-21172799 = 5516100 +starting-at-height-21435299 = 5279578 +starting-at-height-21697799 = 5053198 +starting-at-height-21960299 = 4836526 +starting-at-height-22222799 = 4629144 +starting-at-height-22485299 = 4430652 +starting-at-height-22747799 = 4240674 +starting-at-height-23010299 = 4058840 +starting-at-height-23272799 = 3884804 +starting-at-height-23535299 = 3718230 +starting-at-height-23797799 = 3558798 +starting-at-height-24060299 = 3406202 +starting-at-height-24322799 = 3260150 +starting-at-height-24585299 = 3120360 +starting-at-height-24847799 = 2986564 +starting-at-height-25110299 = 2858506 +starting-at-height-25372799 = 2735938 +starting-at-height-25635299 = 2618624 +starting-at-height-25897799 = 2506342 +starting-at-height-26160299 = 2398874 +starting-at-height-26422799 = 2296014 +starting-at-height-26685299 = 2197564 +starting-at-height-26947799 = 2103336 +starting-at-height-27210299 = 2013150 +starting-at-height-27472799 = 1926828 +starting-at-height-27735299 = 1844210 +starting-at-height-27997799 = 1765132 +starting-at-height-28260299 = 1689446 +starting-at-height-28522799 = 1617006 +starting-at-height-28785299 = 1547672 +starting-at-height-29047799 = 1481310 +starting-at-height-29310299 = 1417794 +starting-at-height-29572799 = 1357000 +starting-at-height-29835299 = 1298814 +starting-at-height-30097799 = 1243124 +starting-at-height-30360299 = 1189820 +starting-at-height-30622799 = 1138802 +starting-at-height-30885299 = 1089972 +starting-at-height-31147799 = 1043236 +starting-at-height-31410299 = 998504 +starting-at-height-31672799 = 955690 +starting-at-height-31935299 = 914712 +starting-at-height-32197799 = 875490 +starting-at-height-32460299 = 837950 +starting-at-height-32722799 = 802020 +starting-at-height-32985299 = 767630 +starting-at-height-33247799 = 734716 +starting-at-height-33510299 = 703212 +starting-at-height-33772799 = 673060 +starting-at-height-34035299 = 644200 +starting-at-height-34297799 = 616578 +starting-at-height-34560299 = 590140 +starting-at-height-34822799 = 564836 +starting-at-height-35085299 = 540616 +starting-at-height-35347799 = 517436 +starting-at-height-35610299 = 495248 +starting-at-height-35872799 = 474014 +starting-at-height-36135299 = 453688 +starting-at-height-36397799 = 434234 +starting-at-height-36660299 = 415616 +starting-at-height-36922799 = 397794 +starting-at-height-37185299 = 380738 +starting-at-height-37447799 = 364412 +starting-at-height-37710299 = 348786 +starting-at-height-37972799 = 333832 +starting-at-height-38235299 = 319518 +starting-at-height-38497799 = 305816 +starting-at-height-38760299 = 292704 +starting-at-height-39022799 = 280154 +starting-at-height-39285299 = 268140 +starting-at-height-39547799 = 256644 +starting-at-height-39810299 = 245638 +starting-at-height-40072799 = 235106 +starting-at-height-40335299 = 225026 +starting-at-height-40597799 = 215376 +starting-at-height-40860299 = 206142 +starting-at-height-41122799 = 197302 +starting-at-height-41385299 = 188842 +starting-at-height-41647799 = 180744 +starting-at-height-41910299 = 172994 +starting-at-height-42172799 = 165578 +starting-at-height-42435299 = 158478 +starting-at-height-42697799 = 151682 +starting-at-height-42960299 = 145178 +starting-at-height-43222799 = 138954 +starting-at-height-43485299 = 132994 +starting-at-height-43747799 = 127292 +starting-at-height-44010299 = 121834 +starting-at-height-44272799 = 116610 +starting-at-height-44535299 = 111610 +starting-at-height-44797799 = 106824 +starting-at-height-45060299 = 102244 +starting-at-height-45322799 = 97860 +starting-at-height-45585299 = 93664 +starting-at-height-45847799 = 89648 +starting-at-height-46110299 = 85804 +starting-at-height-46372799 = 82124 +starting-at-height-46635299 = 78602 +starting-at-height-46897799 = 75232 +starting-at-height-47160299 = 72006 +starting-at-height-47422799 = 68920 +starting-at-height-47685299 = 65964 +starting-at-height-47947799 = 63136 +starting-at-height-48210299 = 60428 +starting-at-height-48472799 = 57838 +starting-at-height-48735299 = 55358 +starting-at-height-48997799 = 52984 +starting-at-height-49260299 = 50712 +starting-at-height-49522799 = 48538 +starting-at-height-49785299 = 46456 +starting-at-height-50047799 = 44464 +starting-at-height-50310299 = 42558 +starting-at-height-50572799 = 40732 +starting-at-height-50835299 = 38986 +starting-at-height-51097799 = 37314 +starting-at-height-51360299 = 35714 +starting-at-height-51622799 = 34182 +starting-at-height-51885299 = 32716 +starting-at-height-52147799 = 31314 +starting-at-height-52410299 = 29972 +starting-at-height-52672799 = 28686 +starting-at-height-52935299 = 27456 +starting-at-height-53197799 = 26278 +starting-at-height-53460299 = 25152 +starting-at-height-53722799 = 24074 +starting-at-height-53985299 = 23042 +starting-at-height-54247799 = 22054 +starting-at-height-54510299 = 21108 +starting-at-height-54772799 = 20202 +starting-at-height-55035299 = 19336 +starting-at-height-55297799 = 18506 +starting-at-height-55560299 = 17714 +starting-at-height-55822799 = 16954 +starting-at-height-56085299 = 16226 +starting-at-height-56347799 = 15532 +starting-at-height-56610299 = 14866 +starting-at-height-56872799 = 14228 +starting-at-height-57135299 = 13618 +starting-at-height-57397799 = 13034 +starting-at-height-57660299 = 12474 +starting-at-height-57922799 = 11940 +starting-at-height-58185299 = 11428 +starting-at-height-58447799 = 10938 +starting-at-height-58710299 = 10468 +starting-at-height-58972799 = 10020 +starting-at-height-59235299 = 9590 +starting-at-height-59497799 = 9178 +starting-at-height-59760299 = 8786 +starting-at-height-60022799 = 8408 +starting-at-height-60285299 = 8048 +starting-at-height-60547799 = 7702 +starting-at-height-60810299 = 7372 +starting-at-height-61072799 = 7056 +starting-at-height-61335299 = 6754 +starting-at-height-61597799 = 6464 +starting-at-height-61860299 = 6186 +starting-at-height-62122799 = 5922 +starting-at-height-62385299 = 5668 +starting-at-height-62647799 = 5424 +starting-at-height-62910299 = 5192 +starting-at-height-63172799 = 4970 +starting-at-height-63435299 = 4756 +starting-at-height-63697799 = 4552 +starting-at-height-63960299 = 4356 +starting-at-height-64222799 = 4170 +starting-at-height-64485299 = 3992 +starting-at-height-64747799 = 3820 +starting-at-height-65010299 = 3656 +starting-at-height-65272799 = 3500 +starting-at-height-65535299 = 3350 +starting-at-height-65797799 = 3206 +starting-at-height-66060299 = 3068 +starting-at-height-66322799 = 2936 +starting-at-height-66585299 = 2810 +starting-at-height-66847799 = 2690 +starting-at-height-67110299 = 2574 +starting-at-height-67372799 = 2464 +starting-at-height-67635299 = 2358 +starting-at-height-67897799 = 2258 +starting-at-height-68160299 = 2160 +starting-at-height-68422799 = 2068 +starting-at-height-68685299 = 1980 +starting-at-height-68947799 = 1894 +starting-at-height-69210299 = 1812 +starting-at-height-69472799 = 1736 +starting-at-height-69735299 = 1660 +starting-at-height-69997799 = 1590 +starting-at-height-70260299 = 1522 +starting-at-height-70522799 = 1456 +starting-at-height-70785299 = 1394 +starting-at-height-71047799 = 1334 +starting-at-height-71310299 = 1276 +starting-at-height-71572799 = 1222 +starting-at-height-71835299 = 1170 +starting-at-height-72097799 = 1120 +starting-at-height-72360299 = 1072 +starting-at-height-72622799 = 1026 +starting-at-height-72885299 = 982 +starting-at-height-73147799 = 938 +starting-at-height-73410299 = 898 +starting-at-height-73672799 = 860 +starting-at-height-73935299 = 824 +starting-at-height-74197799 = 788 +starting-at-height-74460299 = 754 +starting-at-height-74722799 = 722 +starting-at-height-74985299 = 690 +starting-at-height-75247799 = 662 +starting-at-height-75510299 = 632 +starting-at-height-75772799 = 606 +starting-at-height-76035299 = 580 +starting-at-height-76297799 = 554 +starting-at-height-76560299 = 530 +starting-at-height-76822799 = 508 +starting-at-height-77085299 = 486 +starting-at-height-77347799 = 466 +starting-at-height-77610299 = 446 +starting-at-height-77872799 = 426 +starting-at-height-78135299 = 408 +starting-at-height-78397799 = 390 +starting-at-height-78660299 = 374 +starting-at-height-78922799 = 358 +starting-at-height-79185299 = 342 +starting-at-height-79447799 = 328 +starting-at-height-79710299 = 314 +starting-at-height-79972799 = 300 +starting-at-height-80235299 = 286 +starting-at-height-80497799 = 274 +starting-at-height-80760299 = 262 +starting-at-height-81022799 = 252 +starting-at-height-81285299 = 240 +starting-at-height-81547799 = 230 +starting-at-height-81810299 = 220 +starting-at-height-82072799 = 210 +starting-at-height-82335299 = 202 +starting-at-height-82597799 = 194 +starting-at-height-82860299 = 184 +starting-at-height-83122799 = 176 +starting-at-height-83385299 = 170 +starting-at-height-83647799 = 162 +starting-at-height-83910299 = 154 +starting-at-height-84172799 = 148 +starting-at-height-84435299 = 142 +starting-at-height-84697799 = 136 +starting-at-height-84960299 = 130 +starting-at-height-85222799 = 124 +starting-at-height-85485299 = 118 +starting-at-height-85747799 = 114 +starting-at-height-86010299 = 108 +starting-at-height-86272799 = 104 +starting-at-height-86535299 = 100 +starting-at-height-86797799 = 96 +starting-at-height-87060299 = 92 +starting-at-height-87322799 = 88 +starting-at-height-87585299 = 84 +starting-at-height-87847799 = 80 +starting-at-height-88110299 = 76 +starting-at-height-88372799 = 72 +starting-at-height-88635299 = 70 +starting-at-height-88897799 = 66 +starting-at-height-89160299 = 64 +starting-at-height-89422799 = 62 +starting-at-height-89685299 = 58 +starting-at-height-89947799 = 56 +starting-at-height-90210299 = 54 +starting-at-height-90472799 = 52 +starting-at-height-90735299 = 48 +starting-at-height-90997799 = 46 +starting-at-height-91260299 = 44 +starting-at-height-91522799 = 42 +starting-at-height-91785299 = 40 +starting-at-height-92047799 = 40 +starting-at-height-92310299 = 38 +starting-at-height-92572799 = 36 +starting-at-height-92835299 = 34 +starting-at-height-93097799 = 32 +starting-at-height-93360299 = 32 +starting-at-height-93622799 = 30 +starting-at-height-93885299 = 28 +starting-at-height-94147799 = 28 +starting-at-height-94410299 = 26 +starting-at-height-94672799 = 24 +starting-at-height-94935299 = 24 +starting-at-height-95197799 = 22 +starting-at-height-95460299 = 22 +starting-at-height-95722799 = 20 +starting-at-height-95985299 = 20 +starting-at-height-96247799 = 18 +starting-at-height-96510299 = 18 +starting-at-height-96772799 = 18 +starting-at-height-97035299 = 16 +starting-at-height-97297799 = 16 +starting-at-height-97560299 = 14 +starting-at-height-97822799 = 14 +starting-at-height-98085299 = 14 +starting-at-height-98347799 = 12 +starting-at-height-98610299 = 12 +starting-at-height-98872799 = 12 +starting-at-height-99135299 = 12 +starting-at-height-99397799 = 10 +starting-at-height-99660299 = 10 +starting-at-height-99922799 = 10 +starting-at-height-100185299 = 10 +starting-at-height-100447799 = 8 +starting-at-height-100710299 = 8 +starting-at-height-100972799 = 8 +starting-at-height-101235299 = 8 +starting-at-height-101497799 = 8 +starting-at-height-101760299 = 6 +starting-at-height-102022799 = 6 +starting-at-height-102285299 = 6 +starting-at-height-102547799 = 6 +starting-at-height-102810299 = 6 +starting-at-height-103072799 = 6 +starting-at-height-103335299 = 6 +starting-at-height-103597799 = 4 +starting-at-height-103860299 = 4 +starting-at-height-104122799 = 4 +starting-at-height-104385299 = 4 +starting-at-height-104647799 = 4 +starting-at-height-104910299 = 4 +starting-at-height-105172799 = 4 +starting-at-height-105435299 = 4 +starting-at-height-105697799 = 4 +starting-at-height-105960299 = 2 +starting-at-height-106222799 = 2 +starting-at-height-106485299 = 2 +starting-at-height-106747799 = 2 +starting-at-height-107010299 = 2 +starting-at-height-107272799 = 2 +starting-at-height-107535299 = 2 +starting-at-height-107797799 = 2 +starting-at-height-108060299 = 2 +starting-at-height-108322799 = 2 +starting-at-height-108585299 = 2 +starting-at-height-108847799 = 2 +starting-at-height-109110299 = 2 +starting-at-height-109372799 = 2 +starting-at-height-109635299 = 2 +starting-at-height-109897799 = 2 +starting-at-height-110160299 = 1 +starting-at-height-110422799 = 0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-logging-broker.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-logging-broker.properties new file mode 100644 index 000000000..786fae324 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-logging-broker.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_broker%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-logging-recovery.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-logging-recovery.properties new file mode 100644 index 000000000..5e56e7bc2 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-logging-recovery.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_recovery%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-logging-server.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-logging-server.properties new file mode 100644 index 000000000..8550376ff --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-logging-server.properties @@ -0,0 +1,22 @@ +[console] + +sinkType = Async +level = Info +colorMode = Ansi + +[console.component.levels] + +# e.g. to log more verbose messages about the 'net' component, uncomment +# net = Debug + +[file] + +sinkType = Async +level = Info +directory = logs +filePattern = logs/catapult_server%4N.log +rotationSize = 25MB +maxTotalSize = 1000MB +minFreeSpace = 100MB + +[file.component.levels] diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-messaging.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-messaging.properties new file mode 100644 index 000000000..e35474273 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-messaging.properties @@ -0,0 +1,5 @@ +[messaging] + +subscriberPort = 7902 + +listenInterface = 0.0.0.0 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-network.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-network.properties new file mode 100644 index 000000000..315152910 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-network.properties @@ -0,0 +1,120 @@ +[network] + +identifier = private +nemesisSignerPublicKey = 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +nodeEqualityStrategy = host +generationHashSeed = 000000000000000000000000000000000000000000000000000000000000000A +epochAdjustment = 1626575785s + +[chain] + +enableVerifiableState = true +enableVerifiableReceipts = true + +currencyMosaicId = 0x4DAE'C93E'2FAD'68E2 +harvestingMosaicId = 0x4DAE'C93E'2FAD'68E2 + +blockGenerationTargetTime = 30s +blockTimeSmoothingFactor = 3000 + +importanceGrouping = 720 +importanceActivityPercentage = 5 +maxRollbackBlocks = 0 +maxDifficultyBlocks = 60 +defaultDynamicFeeMultiplier = 100 + +maxTransactionLifetime = 6h +maxBlockFutureTime = 300ms + +initialCurrencyAtomicUnits = 7'842'928'625'000'000 +maxMosaicAtomicUnits = 8'999'999'999'000'000 + +totalChainImportance = 7'842'928'625'000'000 +minHarvesterBalance = 10'000'000'000 +maxHarvesterBalance = 50'000'000'000'000 +minVoterBalance = 3'000'000'000'000 + +# assuming finalization ~20 minutes +votingSetGrouping = 1440 +maxVotingKeysPerAccount = 3 +minVotingKeyLifetime = 112 +maxVotingKeyLifetime = 360 + +harvestBeneficiaryPercentage = 25 +harvestNetworkPercentage = 5 +harvestNetworkFeeSinkAddress = PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I + +maxTransactionsPerBlock = 6'000 + +[plugin:catapult.plugins.accountlink] + +dummy = to trigger plugin load + +[plugin:catapult.plugins.aggregate] + +maxTransactionsPerAggregate = 100 +maxCosignaturesPerAggregate = 25 + +# multisig plugin is expected to do more advanced cosignature checks +enableStrictCosignatureCheck = false +enableBondedAggregateSupport = true + +maxBondedTransactionLifetime = 48h + +[plugin:catapult.plugins.lockhash] + +lockedFundsPerAggregate = 10'000'000 +maxHashLockDuration = 2d + +[plugin:catapult.plugins.locksecret] + +maxSecretLockDuration = 365d +minProofSize = 0 +maxProofSize = 1024 + +[plugin:catapult.plugins.metadata] + +maxValueSize = 1024 + +[plugin:catapult.plugins.mosaic] + +maxMosaicsPerAccount = 1'000 +maxMosaicDuration = 3650d +maxMosaicDivisibility = 6 + +mosaicRentalFeeSinkAddress = PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +mosaicRentalFee = 500000 + +[plugin:catapult.plugins.multisig] + +maxMultisigDepth = 3 +maxCosignatoriesPerAccount = 25 +maxCosignedAccountsPerAccount = 25 + +[plugin:catapult.plugins.namespace] + +maxNameSize = 64 +maxChildNamespaces = 100 +maxNamespaceDepth = 3 + +# *approximate* days based on blockGenerationTargetTime +minNamespaceDuration = 30d +maxNamespaceDuration = 1825d +namespaceGracePeriodDuration = 30d +reservedRootNamespaceNames = symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info + +namespaceRentalFeeSinkAddress = PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +rootNamespaceRentalFeePerBlock = 2 +childNamespaceRentalFee = 100000 + +[plugin:catapult.plugins.restrictionaccount] + +maxAccountRestrictionValues = 100 + +[plugin:catapult.plugins.restrictionmosaic] + +maxMosaicRestrictionValues = 20 + +[plugin:catapult.plugins.transfer] + +maxMessageSize = 1024 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-node.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-node.properties new file mode 100644 index 000000000..c62d709a5 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-node.properties @@ -0,0 +1,102 @@ +[node] + +port = 7900 +maxIncomingConnectionsPerIdentity = 6 + +enableAddressReuse = false +enableSingleThreadPool = false +enableCacheDatabaseStorage = true +enableAutoSyncCleanup = false + +fileDatabaseBatchSize = 100 + +enableTransactionSpamThrottling = true +transactionSpamThrottlingMaxBoostFee = 10'000'000 + +maxHashesPerSyncAttempt = 370 +maxBlocksPerSyncAttempt = 360 +maxChainBytesPerSyncAttempt = 100MB + +shortLivedCacheTransactionDuration = 10m +shortLivedCacheBlockDuration = 100m +shortLivedCachePruneInterval = 90s +shortLivedCacheMaxSize = 10'000'000 + +minFeeMultiplier = 100 +maxTimeBehindPullTransactionsStart = 5m +transactionSelectionStrategy = oldest +unconfirmedTransactionsCacheMaxResponseSize = 5MB +unconfirmedTransactionsCacheMaxSize = 20MB + +connectTimeout = 15s +syncTimeout = 5m + +socketWorkingBufferSize = 16KB +socketWorkingBufferSensitivity = 1 +maxPacketDataSize = 150MB + +blockDisruptorSlotCount = 4096 +blockElementTraceInterval = 1 +blockDisruptorMaxMemorySize = 300MB + +transactionDisruptorSlotCount = 8192 +transactionElementTraceInterval = 10 +transactionDisruptorMaxMemorySize = 20MB + +enableDispatcherAbortWhenFull = false +enableDispatcherInputAuditing = false + +maxTrackedNodes = 5'000 + +minPartnerNodeVersion = 1.0.0.0 +maxPartnerNodeVersion = 1.0.255.255 + +# all hosts are trusted when list is empty +trustedHosts = 127.0.0.1, 172.20.0.25 +localNetworks = 127.0.0.1, 172.20.0.25 +listenInterface = 0.0.0.0 + +[cache_database] +enableStatistics = false +maxOpenFiles = 0 +maxBackgroundThreads = 0 +maxSubcompactionThreads = 0 +blockCacheSize = 0MB +memtableMemoryBudget = 0MB +maxWriteBatchSize = 5MB + +[localnode] + +host = testprefix-demo-001.mytest.com +friendlyName = testprefix-demo-001 +version = 1.0.1.0 +roles = Peer,Api + +[outgoing_connections] + +maxConnections = 10 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 + +[incoming_connections] + +maxConnections = 512 +maxConnectionAge = 200 +maxConnectionBanAge = 20 +numConsecutiveFailuresBeforeBanning = 3 +backlogSize = 512 + +[banning] + +defaultBanDuration = 12h +maxBanDuration = 12h +keepAliveDuration = 48h +maxBannedNodes = 5'000 + +numReadRateMonitoringBuckets = 4 +readRateMonitoringBucketDuration = 15s +maxReadRateMonitoringTotalSize = 100MB + +minTransactionFailuresCountForBan = 8 +minTransactionFailuresPercentForBan = 10 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-pt.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-pt.properties new file mode 100644 index 000000000..acd7471b8 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-pt.properties @@ -0,0 +1,4 @@ +[partialtransactions] + +cacheMaxResponseSize = 5MB +cacheMaxSize = 20MB diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-task.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-task.properties new file mode 100644 index 000000000..ee0f99caf --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-task.properties @@ -0,0 +1,104 @@ +### diagnostics ### + +[logging task] +startDelay = 1m +repeatDelay = 10m + +### finalization ### + +[connect peers task for service Finalization] +startDelay = 2s +repeatDelay = 1m + +[finalization task] +startDelay = 2m +repeatDelay = 15s + +[pull finalization messages task] +startDelay = 3s +repeatDelay = 1s + +[pull finalization proof task] +startDelay = 10s +repeatDelay = 50s + +### harvesting ### + +[harvesting task] +startDelay = 30s +repeatDelay = 1s + +### networkheight ### + +[network chain height detection] +startDelay = 1s +repeatDelay = 15s + +### nodediscovery ### + +[node discovery peers task] +startDelay = 1m +minDelay = 1m +maxDelay = 10m +numPhaseOneRounds = 10 +numTransitionRounds = 20 + +[node discovery ping task] +startDelay = 2m +repeatDelay = 5m + +### packetserver ### + +[age peers task for service Readers] +startDelay = 1m +repeatDelay = 1m + +### partialtransaction ### + +[batch partial transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Pt] +startDelay = 3s +repeatDelay = 1m + +[pull partial transactions task] +startDelay = 10s +repeatDelay = 3s + +### sync ### + +[batch transaction task] +startDelay = 500ms +repeatDelay = 500ms + +[connect peers task for service Sync] +startDelay = 1s +repeatDelay = 1m + +[pull unconfirmed transactions task] +startDelay = 4s +repeatDelay = 3s + +[synchronizer task] +startDelay = 3s +repeatDelay = 3s + +### timesync ### + +[time synchronization task] +startDelay = 1m +minDelay = 3m +maxDelay = 180m +numPhaseOneRounds = 5 +numTransitionRounds = 10 + +### local (built-in) ### + +[static node refresh task] +startDelay = 5ms +minDelay = 15s +maxDelay = 24h +numPhaseOneRounds = 20 +numTransitionRounds = 20 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-timesync.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-timesync.properties new file mode 100644 index 000000000..72a741384 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-timesync.properties @@ -0,0 +1,4 @@ +[timesynchronization] + +maxNodes = 20 +minImportance = 10'000'000'000 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-user.properties b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-user.properties new file mode 100644 index 000000000..1b27e2d68 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/config-user.properties @@ -0,0 +1,11 @@ +[account] + +enableDelegatedHarvestersAutoDetection = true + +[storage] + +seedDirectory = ./seed +certificateDirectory = ./cert +dataDirectory = ./data +pluginsDirectory = /usr/catapult/lib +votingKeysDirectory = ./votingkeys diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/peers-api.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/peers-api.json new file mode 100644 index 000000000..523e2b7ba --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/peers-api.json @@ -0,0 +1,38 @@ +{ + "_info": "this file contains a list of api-node peers", + "knownPeers": [ + { + "publicKey": "FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F", + "endpoint": { + "host": "testprefix-dual-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-001", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF", + "endpoint": { + "host": "testprefix-dual-002.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-dual-002", + "roles": "Api,Peer,Voting" + } + }, + { + "publicKey": "E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411", + "endpoint": { + "host": "testprefix-demo-001.mytest.com", + "port": 7900 + }, + "metadata": { + "name": "testprefix-demo-001", + "roles": "Api,Peer" + } + } + ] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/peers-p2p.json b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/peers-p2p.json new file mode 100644 index 000000000..b97551667 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/nodes/node/server-config/resources/peers-p2p.json @@ -0,0 +1,4 @@ +{ + "_info": "this file contains a list of peer-node peers", + "knownPeers": [] +} \ No newline at end of file diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/preset.yml b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/preset.yml new file mode 100644 index 000000000..c1d6fda39 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/preset.yml @@ -0,0 +1,781 @@ +nodeUseRemoteAccount: true +nodePort: 7900 +enableCacheDatabaseStorage: true +enableVerifiableState: true +enableVerifiableReceipts: true +initialCurrencyAtomicUnits: 7842928625000000 +maxMosaicAtomicUnits: 8999999999000000 +totalChainImportance: 7842928625000000 +minHarvesterBalance: 10000000000 +maxHarvesterBalance: 50000000000000 +minVoterBalance: 3000000000000 +blockGenerationTargetTime: 30s +blockTimeSmoothingFactor: 3000 +importanceGrouping: 720 +importanceActivityPercentage: 5 +maxDifficultyBlocks: 60 +maxRollbackBlocks: 0 +maxTransactionLifetime: 6h +maxBlockFutureTime: 300ms +maxNamespaceDuration: 1825d +namespaceGracePeriodDuration: 30d +maxAccountRestrictionValues: 100 +maxMosaicRestrictionValues: 20 +maxMessageSize: 1024 +reservedRootNamespaceNames: 'symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info' +defaultDynamicFeeMultiplier: 100 +minFeeMultiplier: 100 +maxTimeBehindPullTransactionsStart: 5m +epochAdjustment: 1626575785s +nodeEqualityStrategy: host +maxVotingKeyLifetime: 360 +minVotingKeyLifetime: 112 +mosaicRentalFee: 500000 +votingSetGrouping: 1440 +maxVotingKeysPerAccount: 3 +autoUpdateVotingKeys: false +maxTransactionsPerAggregate: 100 +maxCosignaturesPerAggregate: 25 +harvestBeneficiaryPercentage: 25 +harvestNetworkPercentage: 5 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +enableStrictCosignatureCheck: false +enableBondedAggregateSupport: true +maxBondedTransactionLifetime: 48h +maxTransactionsPerBlock: 6000 +stepDuration: 5m +minNamespaceDuration: 30d +trustedHosts: 127.0.0.1 +localNetworks: 127.0.0.1 +lockedFundsPerAggregate: 10000000 +maxHashLockDuration: 2d +maxSecretLockDuration: 365d +minProofSize: 0 +maxProofSize: 1024 +maxValueSize: 1024 +maxMosaicsPerAccount: 1000 +maxMosaicDuration: 3650d +maxMosaicDivisibility: 6 +maxMultisigDepth: 3 +maxCosignatoriesPerAccount: 25 +maxCosignedAccountsPerAccount: 25 +maxNameSize: 64 +maxChildNamespaces: 100 +maxNamespaceDepth: 3 +batchVerificationRandomSource: /dev/urandom +symbolServerImage: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.6' +symbolExplorerImage: 'symbolplatform/symbol-explorer:1.1.0-alpha' +symbolWalletImage: 'symbolplatform/symbol-desktop-wallet:1.0.1' +symbolFaucetImage: 'symbolplatform/symbol-faucet:1.0.1-alpha' +symbolAgentImage: 'symbolplatform/symbol-node-rewards-agent:2.0.0' +mongoImage: 'mongo:4.4.3-bionic' +mongoComposeRunParam: '--wiredTigerCacheSizeGB 2' +logLevel: Info +transactionsDirectory: ./transactions +binDirectory: ./seed +seedDirectory: ./seed +certificateDirectory: ./cert +dataDirectory: ./data +votingKeysDirectory: ./votingkeys +enableDelegatedHarvestersAutoDetection: true +catapultAppFolder: /usr/catapult +rewardProgramAgentPort: 7881 +enableRevoteOnBoot: false +databaseName: catapult +maxWriterThreads: 8 +maxDropBatchSize: 10 +writeTimeout: 10m +peersP2PListLimit: 10000 +peersApiListLimit: 10000 +shortLivedCacheMessageDuration: 10m +messageSynchronizationMaxResponseSize: 20MB +finalizationSize: 10000 +finalizationThreshold: 7000 +maxHashesPerPoint: 256 +prevoteBlocksMultiple: 4 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +voting: false +subscriberPort: 7902 +messagingListenInterface: 0.0.0.0 +networkheight: false +networkHeightMaxNodes: 5 +partialTransactionsCacheMaxResponseSize: 5MB +partialTransactionsCacheMaxSize: 20MB +timeSynchronizationMaxNodes: 20 +timeSynchronizationMinImportance: 10000000000 +maxIncomingConnectionsPerIdentity: 6 +enableAddressReuse: false +nodeListenInterface: 0.0.0.0 +enableTransactionSpamThrottling: true +transactionSpamThrottlingMaxBoostFee: 10000000 +maxHashesPerSyncAttempt: 370 +maxBlocksPerSyncAttempt: 360 +maxChainBytesPerSyncAttempt: 100MB +shortLivedCacheTransactionDuration: 10m +shortLivedCacheBlockDuration: 100m +shortLivedCachePruneInterval: 90s +shortLivedCacheMaxSize: 10000000 +transactionSelectionStrategy: oldest +unconfirmedTransactionsCacheMaxResponseSize: 5MB +unconfirmedTransactionsCacheMaxSize: 20MB +connectTimeout: 15s +syncTimeout: 5m +enableSingleThreadPool: false +sinkType: Async +socketWorkingBufferSize: 16KB +socketWorkingBufferSensitivity: 1 +maxPacketDataSize: 150MB +blockDisruptorSlotCount: 4096 +blockDisruptorMaxMemorySize: 300MB +blockElementTraceInterval: 1 +transactionDisruptorSlotCount: 8192 +transactionDisruptorMaxMemorySize: 20MB +transactionElementTraceInterval: 10 +enableDispatcherAbortWhenFull: false +enableDispatcherInputAuditing: false +maxTrackedNodes: 5'000 +enableAutoHarvesting: true +fileDatabaseBatchSize: 100 +maxUnlockedAccounts: 10 +delegatePrioritizationPolicy: Importance +dockerComposeVersion: '2.4' +dockerComposeServiceRestart: 'on-failure:2' +dockerComposeDebugMode: false +minPartnerNodeVersion: 1.0.0.0 +maxPartnerNodeVersion: 1.0.255.255 +serverVersion: 1.0.1.0 +outgoing_connections_maxConnections: 10 +outgoing_connections_maxConnectionAge: 200 +outgoing_connections_maxConnectionBanAge: 20 +outgoing_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_maxConnections: 512 +incoming_connections_maxConnectionAge: 200 +incoming_connections_maxConnectionBanAge: 20 +incoming_connections_numConsecutiveFailuresBeforeBanning: 3 +incoming_connections_backlogSize: 512 +defaultBanDuration: 12h +maxBanDuration: 72h +keepAliveDuration: 48h +maxBannedNodes: 5000 +numReadRateMonitoringBuckets: 4 +readRateMonitoringBucketDuration: 15s +maxReadRateMonitoringTotalSize: 100MB +minTransactionFailuresCountForBan: 8 +minTransactionFailuresPercentForBan: 10 +enableStatistics: false +maxOpenFiles: 0 +maxBackgroundThreads: 0 +maxSubcompactionThreads: 0 +blockCacheSize: 0MB +memtableMemoryBudget: 0MB +maxWriteBatchSize: 5MB +throttlingBurst: 80 +throttlingRate: 60 +restLoggingFilename: /symbol-workdir/logs/catapult-rest.log +apiNodeConfigPath: /symbol-workdir/api-node-config +subnet: 172.20.0.0/24 +apiNodePort: 7900 +apiNodeTimeout: 1000 +apiNodeBrokerPort: 7902 +apiNodeBrokerPortMonitorInterval: 500 +apiNodeBrokerConnectTimeout: 10000 +apiNodeBrokerMonitorLoggingThrottle: 60000 +maxConnectionAttempts: 15 +baseRetryDelay: 750 +connectionPoolSize: 10 +maxSubscriptions: 300 +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +restDeploymentTool: symbol-bootstrap +networkDescription: My Private Test Network +baseNamespace: pirate +nemesisGenerationHashSeed: 000000000000000000000000000000000000000000000000000000000000000A +harvestNetworkFeeSinkAddress: PA3NCRJUWSHVHS7XZRMMEB5XPOR26KP4Q7IMW5I +namespaceRentalFeeSinkAddress: PCMIS5TGLZD3FHXPW47ATU2SITSLS2IIMLASRGQ +mosaicRentalFeeSinkAddress: PADBIV3AK4CS3323V43HA5XM4PSI53ZYK4ADFJI +nemesisSignerPublicKey: 43AAE8EBBDEDB969415D020B0121118022722A577758C5FA88DCD9D8A2116533 +networkType: 120 +votingKeyDesiredLifetime: 360 +votingKeyDesiredFutureLifetime: 60 +lastKnownNetworkEpoch: 1 +nemesis: + referenceOnly: true + mosaics: + - + name: gold + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +nemesisSeedFolder: nemesis-seed +restDeploymentToolVersion: 1.0.8 +restDeploymentToolLastUpdatedDate: '2021-07-05' +knownRestGateways: + - 'http://testprefix-dual-001.mytest.com:3000' + - 'http://testprefix-dual-002.mytest.com:3000' + - 'http://testprefix-demo-001.mytest.com:3000' +knownPeers: + api-node: + - + publicKey: FF5A06408BB90FCEDD788BAF671158FF40AD7C6D3FA759CF2499C4DCB927617F + endpoint: + host: testprefix-dual-001.mytest.com + port: 7900 + metadata: + name: testprefix-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: 58F24E664527181D46C19708EC523BA797443371E225FC7CB54682B1EDE8D3DF + endpoint: + host: testprefix-dual-002.mytest.com + port: 7900 + metadata: + name: testprefix-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: E39AC4E114EA4299A0F9169CF8CC039A345862AEBA319616E61B595A54B90411 + endpoint: + host: testprefix-demo-001.mytest.com + port: 7900 + metadata: + name: testprefix-demo-001 + roles: 'Api,Peer' + peer-node: [] +faucetUrl: 'http://localhost:100' +databases: + - + name: db + openPort: false +nodes: + - + syncsource: true + filespooling: true + partialtransaction: true + addressextraction: true + mongo: true + zeromq: true + enableAutoSyncCleanup: false + harvesting: true + api: true + name: node + host: testprefix-demo-001.mytest.com + databaseHost: db + brokerName: broker + openPort: true + brokerOpenPort: false + trustedHosts: '127.0.0.1, 172.20.0.25' + localNetworks: '127.0.0.1, 172.20.0.25' + friendlyName: testprefix-demo-001 + voting: false + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false +gateways: + - + name: rest-gateway + apiNodeName: node + apiNodeHost: node + apiNodeBrokerHost: broker + description: '' + databaseHost: db + openPort: true + ipv4_address: 172.20.0.25 +wallets: + - + name: wallet + title: Symbol Bootstrap Wallet + openPort: '80' +explorers: + - + name: explorer + openPort: '90' + footer: + link: + - + href: 'https://nemflash.io/' + text: NEM News + icon: IconNewspaper + - + href: 'https://forum.nem.io/' + text: Forum + icon: IconForum + - + href: 'https://t.me/nemred' + text: Telegram + icon: IconTelegram + - + href: 'https://www.reddit.com/r/nem/' + text: Reddit + icon: IconReddit + - + href: 'https://github.com/nemtech' + text: Github + icon: IconGithub + - + href: 'http://localhost:100/' + text: Faucet + icon: IconHomeCurrencyUsd +faucets: + - + name: faucet + gateway: rest-gateway + environment: + DEFAULT_NODE: 'http://rest-gateway:3000' + DEFAULT_NODE_CLIENT: 'http://localhost:3000' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:90/' + openPort: '100' +privateKeySecurityMode: PROMPT_MAIN_TRANSPORT +version: 1 +preset: custom-network-preset.yml +assembly: demo +customPresetCache: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: testprefix-demo-001 + host: testprefix-demo-001.mytest.com + voting: false + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + faucets: + - + repeat: 1 + nemesisSeedFolder: nemesis-seed +networkIdentifier: private +networkName: private +currencyMosaicId: 4DAEC93E2FAD68E2 +harvestingMosaicId: 4DAEC93E2FAD68E2 diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/app.conf.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/app.conf.js new file mode 100755 index 000000000..6277c735e --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/app.conf.js @@ -0,0 +1,23 @@ +var appConfig = { + title: 'Symbol Bootstrap Wallet', + constants: { + EVENTS_THROTTLING_TIME: 6000, + MAX_LISTENER_RECONNECT_TRIES: 20, + MAX_PASSWORD_LENGTH: 64, + MAX_REMOTE_ACCOUNT_CHECKS: 10, + MAX_SEED_ACCOUNTS_NUMBER: 10, + MIN_PASSWORD_LENGTH: 8, + SEED_ACCOUNT_NAME_PREFIX: 'SeedWallet-', + ANNOUNCE_TRANSACTION_TIMEOUT: 240000, + DECIMAL_SEPARATOR: Number('1.1').toLocaleString().substring(1, 2), + }, + languages: [ + { value: 'en-US', label: 'English' }, + { value: 'zh-CN', label: '中文' }, + { value: 'ja-JP', label: '日本語' }, + ], + marketServerUrl: 'http://app.nemcn.io', + articlesFeedUrl: 'http://rssmix.com/u/11801188/rss.xml', +} +window.appConfig = appConfig +console.log('appConfig loaded!', appConfig) diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/fees.conf.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/fees.conf.js new file mode 100755 index 000000000..1a40c3f28 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/fees.conf.js @@ -0,0 +1,9 @@ +var feesConfig = { + median: 10, + free: 0, + slow: 5, + slowest: 1, + fast: 20, +} +window.feesConfig = feesConfig +console.log('feesConfig loaded!', feesConfig) diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/network.conf.js b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/network.conf.js new file mode 100755 index 000000000..e07ccf049 --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/network.conf.js @@ -0,0 +1,39 @@ +var networkTypeConfig = { + "explorerUrl": "", + "faucetUrl": "http://localhost:100", + "defaultNetworkType": 120, + "defaultNodeUrl": "http://testprefix-demo-001.mytest.com:3000", + "networkConfigurationDefaults": { + "maxMosaicDivisibility": 6, + "namespaceGracePeriodDuration": 2592000, + "lockedFundsPerAggregate": "10000000", + "maxCosignatoriesPerAccount": 25, + "blockGenerationTargetTime": 30, + "maxNamespaceDepth": 3, + "maxMosaicDuration": 315360000, + "minNamespaceDuration": 2592000, + "maxNamespaceDuration": 157680000, + "maxTransactionsPerAggregate": 100, + "maxCosignedAccountsPerAccount": 25, + "maxMessageSize": 1024, + "maxMosaicAtomicUnits": 8999999999000000, + "currencyMosaicId": "4DAEC93E2FAD68E2", + "harvestingMosaicId": "4DAEC93E2FAD68E2", + "defaultDynamicFeeMultiplier": 100, + "epochAdjustment": 1626575785, + "totalChainImportance": 7842928625000000, + "generationHash": "000000000000000000000000000000000000000000000000000000000000000A" + }, + "nodes": [ + {"friendlyName": "testprefix-demo-001.mytest.com", "roles": 2, "url": "http://testprefix-demo-001.mytest.com:3000"}, + {"friendlyName": "testprefix-dual-001.mytest.com", "roles": 2, "url": "http://testprefix-dual-001.mytest.com:3000"}, + {"friendlyName": "testprefix-dual-002.mytest.com", "roles": 2, "url": "http://testprefix-dual-002.mytest.com:3000"}, + ] +} +var networkConfig = { 120 : networkTypeConfig } +window.networkConfig = networkConfig +console.log('networkConfig loaded!', networkConfig) + + + + diff --git a/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/profileImporter.html b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/profileImporter.html new file mode 100755 index 000000000..bd0ee1add --- /dev/null +++ b/packages/network-cli/test/expectedTargets/network1-end/nodes/node-003/target/wallets/wallet/profileImporter.html @@ -0,0 +1,140 @@ + + + + + + Profile Importer + + + +

Profile Importer File Form

+ + +
+
+
+ + +
+ +

Profile Importer Text Form

+
+
+ +
+
+ Go back to the wallet + + diff --git a/packages/network-cli/tsconfig.build.json b/packages/network-cli/tsconfig.build.json new file mode 100644 index 000000000..a74389c9d --- /dev/null +++ b/packages/network-cli/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.build.json", + + "compilerOptions": { + "outDir": "./lib" + }, + + "include": ["src/**/*"] +} diff --git a/packages/network-cli/tsconfig.json b/packages/network-cli/tsconfig.json new file mode 100644 index 000000000..63b5082a6 --- /dev/null +++ b/packages/network-cli/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/network-core/README.md b/packages/network-core/README.md new file mode 100644 index 000000000..9f70b99b0 --- /dev/null +++ b/packages/network-core/README.md @@ -0,0 +1,21 @@ +# symbol-network-core + +Symbol library to create node clusters for new or existing networks. + +[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io) +[![Version](https://img.shields.io/npm/v/symbol-network-core.svg)](https://npmjs.org/package/symbol-network-core) +[![Downloads/week](https://img.shields.io/npm/dw/symbol-network-core.svg)](https://npmjs.org/package/symbol-network-core) +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +[![Build Status](https://travis-ci.com/symbol/symbol-bootstrap.svg?branch=main)](https://travis-ci.com/symbol/symbol-bootstrap) +[![Coverage Status](https://coveralls.io/repos/github/symbol/symbol-bootstrap/badge.svg?branch=main)](https://coveralls.io/github/symbol/symbol-bootstrap?branch=main) +[![Api Doc](https://img.shields.io/badge/api-doc-blue.svg)](../../) + +# Why this library? + +To handle dozens or hundreds of Symbol Nodes in "cattle" style, where nodes are created and managed in bundles. It's the core library of the [symbol-network](../network-cli) cli. + +If you are creating a Symbol node for the first time, please have look at the [symbol-bootstrap](../bootstrap-cli) cli. + +For regular usage or if you are creating a Symbol Network for the first time, please try the [symbol-network](../network-cli) cli. + +You can import this library if you want to create a custom Javascript/Typescript tool to manage networks. diff --git a/packages/network-core/package-lock.json b/packages/network-core/package-lock.json new file mode 100644 index 000000000..bc862929f --- /dev/null +++ b/packages/network-core/package-lock.json @@ -0,0 +1,1195 @@ +{ + "name": "symbol-network-core", + "version": "0.0.1-alpha.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "symbol-network-core", + "version": "0.0.1-alpha.0", + "license": "Apache-2.0", + "dependencies": { + "lodash": "^4.17.21", + "node-fetch": "^2.6.1", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "utf8": "^3.0.0" + }, + "bin": { + "symbol-network-core": "lib/index.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@js-joda/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz", + "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==" + }, + "node_modules/bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "engines": { + "node": "*" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "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/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "node_modules/buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=" + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "node_modules/catbuffer-typescript": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/catbuffer-typescript/-/catbuffer-typescript-0.1.1.tgz", + "integrity": "sha512-r/z3UKG3YCCdsTEHRXGe3IQxA8OaBRBE31e9du2LOaLStGxYCmxUjfRtJ/DyKfgpS55fJPl3w/VFMnsfwIHmkA==" + }, + "node_modules/crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=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/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "node_modules/futoin-hkdf": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz", + "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "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/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-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, + "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/js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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/merkletreejs": { + "version": "0.2.23", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.23.tgz", + "integrity": "sha512-L3iWPXiyx81on1uZpfBEWFo+bm9T9YLwffQaWIUUTNoQZkVV8BfThXtbFLbMnurXSzPiAYi4C8qN62XAvdI3Dg==", + "dependencies": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^3.1.9-1", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/merkletreejs/node_modules/crypto-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", + "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "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/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "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/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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/simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "engines": { + "node": ">=0.10.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/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/symbol-openapi-typescript-fetch-client": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/symbol-openapi-typescript-fetch-client/-/symbol-openapi-typescript-fetch-client-0.11.2.tgz", + "integrity": "sha512-A1MAN8/UWlaCEibBf6zxkduZwDNSvWwLPp6JB0GeYI/FAOrw/9nLyuS/NJQ3siGAUclnuejH1wG7KdUg0/4RSw==" + }, + "node_modules/symbol-sdk": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-sdk/-/symbol-sdk-1.0.1.tgz", + "integrity": "sha512-G4sdGBfggTSqKs9XchMQAtOfl80Z2eARafxZnzje5qxzfUSQUCFYdBP7IJiA2PDoeyfXJJpzWWTlgq9EzvKm1A==", + "dependencies": { + "@js-joda/core": "^3.2.0", + "bluebird": "^3.7.2", + "catbuffer-typescript": "0.1.1", + "crypto-js": "^4.0.0", + "diff": "^4.0.2", + "futoin-hkdf": "^1.3.2", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "long": "^4.0.0", + "merkletreejs": "^0.2.9", + "minimist": "^1.2.5", + "node-fetch": "^2.6.0", + "ripemd160": "^2.0.2", + "rxjs": "^6.6.3", + "rxjs-compat": "^6.6.3", + "symbol-openapi-typescript-fetch-client": "0.11.2", + "tweetnacl": "^1.0.3", + "utf8": "^2.1.2", + "ws": "^7.3.1" + } + }, + "node_modules/symbol-sdk/node_modules/utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "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/web3-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.4.0.tgz", + "integrity": "sha512-b8mEhwh/J928Xk+SQFjtqrR2EGPhpknWLcIt9aCpVPVRXiqjUGo/kpOHKz0azu9c6/onEJ9tWXZt0cVjmH0N5Q==", + "dependencies": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.12.1", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "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/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + } + }, + "dependencies": { + "@js-joda/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz", + "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==" + }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "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==" + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "catbuffer-typescript": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/catbuffer-typescript/-/catbuffer-typescript-0.1.1.tgz", + "integrity": "sha512-r/z3UKG3YCCdsTEHRXGe3IQxA8OaBRBE31e9du2LOaLStGxYCmxUjfRtJ/DyKfgpS55fJPl3w/VFMnsfwIHmkA==" + }, + "crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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" + } + }, + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "futoin-hkdf": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz", + "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==" + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "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" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + }, + "js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "merkletreejs": { + "version": "0.2.23", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.23.tgz", + "integrity": "sha512-L3iWPXiyx81on1uZpfBEWFo+bm9T9YLwffQaWIUUTNoQZkVV8BfThXtbFLbMnurXSzPiAYi4C8qN62XAvdI3Dg==", + "requires": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^3.1.9-1", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "dependencies": { + "crypto-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", + "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + } + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "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=" + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "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==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "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" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "symbol-openapi-typescript-fetch-client": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/symbol-openapi-typescript-fetch-client/-/symbol-openapi-typescript-fetch-client-0.11.2.tgz", + "integrity": "sha512-A1MAN8/UWlaCEibBf6zxkduZwDNSvWwLPp6JB0GeYI/FAOrw/9nLyuS/NJQ3siGAUclnuejH1wG7KdUg0/4RSw==" + }, + "symbol-sdk": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-sdk/-/symbol-sdk-1.0.1.tgz", + "integrity": "sha512-G4sdGBfggTSqKs9XchMQAtOfl80Z2eARafxZnzje5qxzfUSQUCFYdBP7IJiA2PDoeyfXJJpzWWTlgq9EzvKm1A==", + "requires": { + "@js-joda/core": "^3.2.0", + "bluebird": "^3.7.2", + "catbuffer-typescript": "0.1.1", + "crypto-js": "^4.0.0", + "diff": "^4.0.2", + "futoin-hkdf": "^1.3.2", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "long": "^4.0.0", + "merkletreejs": "^0.2.9", + "minimist": "^1.2.5", + "node-fetch": "^2.6.0", + "ripemd160": "^2.0.2", + "rxjs": "^6.6.3", + "rxjs-compat": "^6.6.3", + "symbol-openapi-typescript-fetch-client": "0.11.2", + "tweetnacl": "^1.0.3", + "utf8": "^2.1.2", + "ws": "^7.3.1" + }, + "dependencies": { + "utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + } + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "web3-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.4.0.tgz", + "integrity": "sha512-b8mEhwh/J928Xk+SQFjtqrR2EGPhpknWLcIt9aCpVPVRXiqjUGo/kpOHKz0azu9c6/onEJ9tWXZt0cVjmH0N5Q==", + "requires": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.12.1", + "utf8": "3.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "requires": {} + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "requires": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "requires": { + "xhr-request": "^1.1.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/packages/network-core/package.json b/packages/network-core/package.json new file mode 100644 index 000000000..42bfd6473 --- /dev/null +++ b/packages/network-core/package.json @@ -0,0 +1,48 @@ +{ + "name": "symbol-network-core", + "version": "0.0.1-alpha.0", + "description": "", + "main": "lib/index.js", + "bin": "lib/index.js", + "types": "lib/index.js", + "homepage": "https://github.com/symbol/symbol-bootstrap", + "bugs": "https://github.com/symbol/symbol-bootstrap/issues", + "scripts": { + "doc": "shx mkdir -p ts-docs && typedoc --out \"ts-docs\" src && touch ./ts-docs/.nojekyll", + "clean": "npx shx rm -rf lib", + "purge": "npx shx rm -rf lib coverage node_modules target .nyc_output logs.log ts-docs", + "watch": "tsc -p tsconfig.build.json --watch", + "compile": "tsc -p tsconfig.build.json", + "build": "npx shx rm -rf lib && npm run compile", + "lib": "npm run clean && npm run compile", + "version": "echo $npm_package_version", + "prettier": "prettier --write ./src", + "lint": "eslint --cache src/ --ext .ts", + "prepack": "npx shx rm -rf lib && npm run compile", + "lint:fix": "eslint src/ --ext .ts --fix", + "style:fix": "npm run create-index-files && npm run prettier && npm run lint:fix", + "create-index-files": "cti create ./src -b -n -e commands", + "test": "nyc --reporter=lcov --extension .ts mocha -r ts-node/register --timeout 600000 --forbid-only \"test/**/*.test.ts\"" + }, + "files": [ + "/lib" + ], + "keywords": [], + "author": "Fernando Boucquez ", + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + }, + "mocha": { + "timeout": 40000 + }, + "dependencies": { + "lodash": "^4.17.21", + "node-fetch": "^2.6.1", + "symbol-bootstrap-core": "^1.1.0-alpha.0", + "symbol-sdk": "^1.0.1", + "tslib": "^2.3.0", + "utf8": "^3.0.0" + }, + "gitHead": "b24acdda47ff73f56412c42b39f52dbf6d37686d" +} diff --git a/packages/network-core/src/deployment/aws/AwsDeploymentData.ts b/packages/network-core/src/deployment/aws/AwsDeploymentData.ts new file mode 100644 index 000000000..78e1cfb41 --- /dev/null +++ b/packages/network-core/src/deployment/aws/AwsDeploymentData.ts @@ -0,0 +1,8 @@ +import { DeploymentData } from '../../model'; + +export interface AwsDeploymentData extends DeploymentData { + bucketName?: string; + bucketFolder: string; + secretIdPrefix: string; + masterRegion: string; +} diff --git a/packages/network-core/src/deployment/aws/AwsNodeMetadata.ts b/packages/network-core/src/deployment/aws/AwsNodeMetadata.ts new file mode 100644 index 000000000..2321b976a --- /dev/null +++ b/packages/network-core/src/deployment/aws/AwsNodeMetadata.ts @@ -0,0 +1,67 @@ +import { NodeInformation, NodeMetadataType } from '../../model/NodeInformation'; + +export type AwsRootBlockSize = number; +export enum AwsNodeSize { + xlarge = 't3.xlarge', + large = 't3.large', +} + +export enum Region { + 'us-east-1' = 'us-east-1', + 'us-west-1' = 'us-west-1', + 'us-west-2' = 'us-west-2', + 'eu-west-1' = 'eu-west-1', + 'eu-central-1' = 'eu-central-1', + 'ap-northeast-1' = 'ap-northeast-1', + 'ap-southeast-1' = 'ap-southeast-1', +} + +export const regions: Region[] = Object.keys(Region) as Region[]; + +export interface AwsNodeMetadata { + nodeSize: AwsNodeSize; + rootBlockSize: AwsRootBlockSize; +} + +export interface AwsNodeData extends AwsNodeMetadata, NodeInformation { + region: Region; +} + +export const nodesAwsMetadata: Record = { + VotingPeer: { + nodeSize: AwsNodeSize.xlarge, + rootBlockSize: 250, + }, + VotingApi: { + nodeSize: AwsNodeSize.xlarge, + rootBlockSize: 250, + }, + VotingDual: { + nodeSize: AwsNodeSize.xlarge, + rootBlockSize: 500, + }, + HarvestingPeer: { + nodeSize: AwsNodeSize.xlarge, + rootBlockSize: 500, + }, + HarvestingDual: { + nodeSize: AwsNodeSize.xlarge, + rootBlockSize: 750, + }, + HarvestingDemo: { + nodeSize: AwsNodeSize.xlarge, + rootBlockSize: 750, + }, + Peer: { + nodeSize: AwsNodeSize.large, + rootBlockSize: 250, + }, + Api: { + nodeSize: AwsNodeSize.xlarge, + rootBlockSize: 750, + }, + VotingNonHarvestingPeer: { + nodeSize: AwsNodeSize.large, + rootBlockSize: 250, + }, +}; diff --git a/packages/network-core/src/deployment/aws/index.ts b/packages/network-core/src/deployment/aws/index.ts new file mode 100644 index 000000000..0e12d01a7 --- /dev/null +++ b/packages/network-core/src/deployment/aws/index.ts @@ -0,0 +1,4 @@ +// created from 'create-ts-index' + +export * from './AwsDeploymentData'; +export * from './AwsNodeMetadata'; diff --git a/packages/network-core/src/deployment/index.ts b/packages/network-core/src/deployment/index.ts new file mode 100644 index 000000000..4ae734249 --- /dev/null +++ b/packages/network-core/src/deployment/index.ts @@ -0,0 +1,3 @@ +// created from 'create-ts-index' + +export * from './aws'; diff --git a/packages/network-core/src/index.ts b/packages/network-core/src/index.ts new file mode 100644 index 000000000..b20893431 --- /dev/null +++ b/packages/network-core/src/index.ts @@ -0,0 +1,5 @@ +// created from 'create-ts-index' + +export * from './deployment'; +export * from './model'; +export * from './services'; diff --git a/packages/network-core/src/model/Network.ts b/packages/network-core/src/model/Network.ts new file mode 100644 index 000000000..66b9f841e --- /dev/null +++ b/packages/network-core/src/model/Network.ts @@ -0,0 +1,58 @@ +import { NetworkType } from 'symbol-sdk'; + +export enum Network { + mainnet = 'mainnet', + testnet = 'testnet', + privateTest = 'privateTest', + private = 'private', + mijinTest = 'mijinTest', + mijin = 'mijin', +} + +export const toNetworkType = (network: Network): NetworkType => { + switch (network) { + case Network.private: { + return NetworkType.PRIVATE; + } + case Network.privateTest: { + return NetworkType.PRIVATE_TEST; + } + case Network.testnet: { + return NetworkType.TEST_NET; + } + case Network.mainnet: { + return NetworkType.MAIN_NET; + } + case Network.mijinTest: { + return NetworkType.MIJIN_TEST; + } + case Network.mijin: { + return NetworkType.MIJIN; + } + } + throw new Error(`Invalid network ${network}!!!`); +}; + +export const toDescription = (network: Network): string => { + switch (network) { + case Network.private: { + return 'Private'; + } + case Network.privateTest: { + return 'Private Test'; + } + case Network.testnet: { + return 'Testnet'; + } + case Network.mainnet: { + return 'Mainnet'; + } + case Network.mijinTest: { + return 'Mijin Test'; + } + case Network.mijin: { + return 'Mijin'; + } + } + throw new Error(`Invalid network ${network}!!!`); +}; diff --git a/packages/network-core/src/model/NetworkFile.ts b/packages/network-core/src/model/NetworkFile.ts new file mode 100644 index 000000000..ddcd02cba --- /dev/null +++ b/packages/network-core/src/model/NetworkFile.ts @@ -0,0 +1,96 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigAccount } from 'symbol-bootstrap-core'; +import { NodeInformation, NodeMetadataType } from './NodeInformation'; + +export enum DeploymentType { + CUSTOM = 'CUSTOM', + AWS = 'AWS', +} + +export interface DeploymentData { + type: DeploymentType; +} + +export interface CosignerAccountInput { + number: number; + publicKey: string; + balance: number; + testOnlyPrivateKey?: string; // only for e2e testsing +} + +export interface CosignerAccount extends CosignerAccountInput { + address: string; +} + +export interface NodeTypeInput { + nickName: string; + nodeType: NodeMetadataType; + total: number; + balances: number[]; +} + +export interface CosignerPersonInput { + number: number; + cosignerAccounts: CosignerAccountInput[]; +} + +export interface CosignerPerson { + number: number; + cosignerAccounts: CosignerAccount[]; +} + +export interface BalanceConfigAccount extends ConfigAccount { + balance: number; +} +export type TransactionInformation = { + type: string; + nodeNumber: number; + typeNumber: number; + payload: string; +}; + +export interface BasicNetworkFile { + preset: string; + deploymentData: T; + epochAdjustment: number; + networkType: number; + networkDescription: string; + nemesisGenerationHashSeed: string; + isNewNetwork: boolean; + nemesisSeedFolder?: string; + rewardProgramControllerApiUrl?: string; + faucetBalances?: number[]; + multisig?: { + ownershipCount: number; + cosigners: CosignerPerson[]; + minApprovalDelta: number; + minRemovalDelta: number; + }; + domain: string; + suffix: string; +} + +export interface NetworkFile + extends BasicNetworkFile { + nodes: N[]; +} + +export interface NetworkInputFile + extends BasicNetworkFile { + nodeTypes: N[]; +} diff --git a/packages/network-core/src/model/NodeInformation.ts b/packages/network-core/src/model/NodeInformation.ts new file mode 100644 index 000000000..36ee0c101 --- /dev/null +++ b/packages/network-core/src/model/NodeInformation.ts @@ -0,0 +1,157 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CustomPreset, NodeAccount as NodeAddresses } from 'symbol-bootstrap-core'; + +export enum NodeMetadataType { + VotingPeer = 'VotingPeer', + VotingApi = 'VotingApi', + VotingDual = 'VotingDual', + HarvestingPeer = 'HarvestingPeer', + HarvestingDual = 'HarvestingDual', + HarvestingDemo = 'HarvestingDemo', + VotingNonHarvestingPeer = 'VotingNonHarvestingPeer', + Peer = 'Peer', + Api = 'Api', +} + +export class NodeMetadataUtils { + public static getAssembly(metadata: NodeTypeMetadata): string { + if (metadata.assembly) { + return metadata.assembly; + } + return metadata.api && metadata.peer ? 'dual' : metadata.api ? 'api' : 'peer'; + } +} + +export interface NodeTypeMetadata { + name: string; + balances: number[]; + api: boolean; + peer: boolean; + harvesting: boolean; + voting: boolean; + demo: boolean; + nickName: string; + assembly?: string; +} + +export const nodesMetadata: Record = { + VotingPeer: { + name: 'Voting Peer', + balances: [3_000_000, 150], + voting: true, + harvesting: true, + demo: false, + api: false, + peer: true, + nickName: 'beacon', + }, + VotingApi: { + name: 'Voting Api', + balances: [3_000_000, 150], + voting: true, + harvesting: true, + demo: false, + api: false, + peer: true, + nickName: 'beacon', + }, + VotingDual: { + name: 'Voting Dual', + balances: [3_000_000, 150], + voting: true, + harvesting: true, + demo: false, + api: true, + peer: true, + nickName: 'dual', + }, + HarvestingPeer: { + name: 'Harvesting Peer', + balances: [1_000_000, 150], + voting: false, + harvesting: true, + demo: false, + api: false, + peer: true, + nickName: 'beacon', + }, + HarvestingDual: { + name: 'Harvesting Dual', + balances: [1_000_000, 150], + voting: false, + harvesting: true, + demo: false, + api: true, + peer: true, + nickName: 'dual', + }, + + HarvestingDemo: { + name: 'Harvesting Demo', + balances: [1_000_000, 150], + voting: false, + harvesting: true, + demo: true, + api: true, + peer: true, + assembly: 'demo', + nickName: 'demo', + }, + Peer: { + name: 'Peer', + balances: [1_000, 0], + voting: false, + harvesting: false, + demo: false, + api: false, + peer: true, + nickName: 'peer', + }, + Api: { + name: 'Api', + balances: [1_000, 0], + voting: false, + harvesting: false, + demo: false, + api: true, + peer: false, + nickName: 'api', + }, + VotingNonHarvestingPeer: { + name: 'Non Harvesting Voting Peer', + balances: [51_000_000, 0], + voting: true, + harvesting: false, + demo: false, + api: false, + peer: true, + nickName: 'peer', + }, +}; + +export interface NodeInformation { + number: number; + nickName: string; + friendlyName: string; + assembly: string; + hostname: string; + nodeType: NodeMetadataType; + balances: number[]; + addresses?: NodeAddresses; + customPreset?: CustomPreset; +} diff --git a/packages/network-core/src/model/index.ts b/packages/network-core/src/model/index.ts new file mode 100644 index 000000000..1f53f8a1d --- /dev/null +++ b/packages/network-core/src/model/index.ts @@ -0,0 +1,5 @@ +// created from 'create-ts-index' + +export * from './Network'; +export * from './NetworkFile'; +export * from './NodeInformation'; diff --git a/packages/network-core/src/services/KeyStore.ts b/packages/network-core/src/services/KeyStore.ts new file mode 100644 index 000000000..a4d07b9b6 --- /dev/null +++ b/packages/network-core/src/services/KeyStore.ts @@ -0,0 +1,213 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { existsSync } from 'fs'; +import { join, resolve } from 'path'; +import { BootstrapUtils, KeyName, Password, VotingKeyAccount, VotingUtils } from 'symbol-bootstrap-core'; +import { Account, NetworkType } from 'symbol-sdk'; +import { NodeInformation } from '../model'; +import { NetworkUtils } from './NetworkUtils'; + +export type VotingKeyFileContent = VotingKeyAccount & { + fileContent: Uint8Array; +}; + +export type NetworkAccountName = + | 'founder' + | 'faucet' + | 'nemesisSigner' + | 'harvestNetworkFeeSink' + | 'mosaicRentalFeeSink' + | 'namespaceRentalFeeSink' + | 'rewardProgramEnrollment'; + +export interface KeyStore { + getNodeAccount( + networkType: NetworkType, + keyName: KeyName, + nodeName: string, + nodeInformation: NodeInformation, + generate: boolean, + ): Promise; + + getVotingKeyFile( + networkType: NetworkType, + nodeName: string, + nodeInformation: NodeInformation, + startEpoch: number, + endEpoch: number, + ): Promise; + + getNetworkAccount(networkType: NetworkType, accountName: NetworkAccountName, generate: boolean): Promise; + + saveNetworkAccount(networkType: NetworkType, accountName: NetworkAccountName, privateKey: string): Promise; +} + +export class LazyKeyStore implements KeyStore { + private delegate: KeyStore | undefined; + constructor(private readonly factory: () => Promise) {} + + async getNetworkAccount(networkType: NetworkType, accountName: NetworkAccountName, generate: boolean): Promise { + return (await this.getDelegate()).getNetworkAccount(networkType, accountName, generate); + } + + async getNodeAccount( + networkType: NetworkType, + keyName: KeyName, + nodeName: string, + nodeInformation: NodeInformation, + generate: boolean, + ): Promise { + return (await this.getDelegate()).getNodeAccount(networkType, keyName, nodeName, nodeInformation, generate); + } + + async saveNetworkAccount(networkType: NetworkType, accountName: NetworkAccountName, privateKey: string): Promise { + return (await this.getDelegate()).saveNetworkAccount(networkType, accountName, privateKey); + } + + private async getDelegate(): Promise { + if (!this.delegate) this.delegate = await this.factory(); + return this.delegate; + } + + async getVotingKeyFile( + networkType: NetworkType, + nodeName: string, + nodeInformation: NodeInformation, + startEpoch: number, + endEpoch: number, + ): Promise { + return (await this.getDelegate()).getVotingKeyFile(networkType, nodeName, nodeInformation, startEpoch, endEpoch); + } +} + +export interface StoredAccount { + privateKey: string; + publicKey: string; + address: string; +} + +export interface KeyStorage { + network: Partial>; + nodes: Record>; + votingFiles: Record; +} + +export class LocalFileKeyStore implements KeyStore { + private readonly storage: KeyStorage; + private readonly storageFile: string; + constructor(private readonly password: Password, private readonly mustExist: boolean, private readonly workingDir: string) { + this.storageFile = join(this.workingDir, NetworkUtils.KEY_STORE_FILE); + const defaultValue = { nodes: {}, network: {}, votingFiles: {} }; + const exist = existsSync(this.storageFile); + if (!exist && mustExist) { + throw new Error(`Storage file ${resolve(this.storageFile)} does not exist!`); + } + const storedValue = exist ? (BootstrapUtils.loadYaml(this.storageFile, password) as KeyStorage) : {}; + this.storage = { + ...defaultValue, + ...storedValue, + }; + } + + async getVotingKeyFile( + networkType: NetworkType, + nodeName: string, + nodeInformation: NodeInformation, + startEpoch: number, + endEpoch: number, + ): Promise { + const votingUtils = new VotingUtils(); + const nodeKey = `${nodeName}-${nodeInformation.number}-${startEpoch}-${endEpoch}`; + const storedFile = this.storage.votingFiles[nodeKey]; + if (storedFile) { + const fileContent = Buffer.from(storedFile.fileContent, 'base64'); + const votingFile = votingUtils.readVotingFile(fileContent); + if (votingFile.startEpoch != startEpoch) { + throw new Error(`Unexpected startEpoch on stored file. Expected ${startEpoch} but got ${votingFile.startEpoch}`); + } + if (votingFile.endEpoch != endEpoch) { + throw new Error(`Unexpected endEpoch on stored file. Expected ${endEpoch} but got ${votingFile.endEpoch}`); + } + return { ...votingFile, fileContent }; + } + + const votingAccount = Account.generateNewAccount(networkType); + const votingFile = { + publicKey: votingAccount.publicKey, + startEpoch: startEpoch, + endEpoch: endEpoch, + }; + const fileContent = await votingUtils.createVotingFile(votingAccount.privateKey, votingFile.startEpoch, votingFile.endEpoch); + this.storage.votingFiles = this.storage.votingFiles || {}; + this.storage.votingFiles[nodeKey] = { + publicKey: votingAccount.publicKey, + fileContent: Buffer.from(fileContent).toString('base64'), + }; + await this.save(); + return { ...votingFile, fileContent }; + } + + async saveNetworkAccount(networkType: NetworkType, accountName: NetworkAccountName, privateKey: string): Promise { + this.storage.network = this.storage.network || {}; + this.storage.network[accountName] = this.toStored(Account.createFromPrivateKey(privateKey, networkType)); + await this.save(); + } + + async getNetworkAccount(networkType: NetworkType, accountName: NetworkAccountName, generate: boolean): Promise { + const storedAccount = this.storage.network[accountName] || this.toStored(this.generateNewAccount(generate, networkType)); + const account = Account.createFromPrivateKey(storedAccount.privateKey, networkType); + this.storage.network = this.storage.network || {}; + this.storage.network[accountName] = this.toStored(account); + await this.save(); + return account; + } + + private save(): Promise { + return BootstrapUtils.writeYaml(this.storageFile, this.storage, this.password); + } + + async getNodeAccount( + networkType: NetworkType, + keyName: KeyName, + nodeName: string, + nodeInformation: NodeInformation, + generate: boolean, + ): Promise { + const nodeKey = `${nodeName}-${nodeInformation.number}`; + const storedAccount = this.storage.nodes[nodeKey]?.[keyName] || this.toStored(this.generateNewAccount(generate, networkType)); + const account = Account.createFromPrivateKey(storedAccount.privateKey, networkType); + this.storage.nodes = this.storage.nodes || {}; + this.storage.nodes[nodeKey] = this.storage.nodes[nodeKey] || {}; + this.storage.nodes[nodeKey][keyName] = this.toStored(account); + await this.save(); + return account; + } + public toStored(account: Account): StoredAccount { + return { + privateKey: account.privateKey, + publicKey: account.publicKey, + address: account.address.plain(), + }; + } + + protected generateNewAccount(generate: boolean, networkType: NetworkType): Account { + if (!generate) { + throw new Error('Account cannot be generated!!'); + } + return Account.generateNewAccount(networkType); + } +} diff --git a/packages/network-core/src/services/NetworkAccountResolver.ts b/packages/network-core/src/services/NetworkAccountResolver.ts new file mode 100644 index 000000000..04be9a126 --- /dev/null +++ b/packages/network-core/src/services/NetworkAccountResolver.ts @@ -0,0 +1,52 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { AccountResolver, CertificatePair, KeyName, Logger } from 'symbol-bootstrap-core'; +import { Account, NetworkType } from 'symbol-sdk'; +import { NodeInformation } from '../model'; +import { KeyStore } from './KeyStore'; + +export class NetworkAccountResolver implements AccountResolver { + constructor(private readonly logger: Logger, private readonly node: NodeInformation, private readonly keyStore: KeyStore) {} + + public async shouldAnnounce(): Promise { + return true; + } + + resolveCosigners(): Promise { + throw new Error('Method not implemented.'); + } + + public async resolveAccount( + networkType: NetworkType, + account: CertificatePair | undefined, + keyName: KeyName, + nodeName: string, + operationDescription: string, + ): Promise { + if (account && account.privateKey) { + return Account.createFromPrivateKey(account.privateKey, networkType); + } + + this.logger.info(`Loading ${keyName} Key for ${nodeName} of ${this.node.number}. Operation ${operationDescription}`); + const storedAccount = await this.keyStore.getNodeAccount(networkType, keyName, nodeName, this.node, true); + + if (account && storedAccount.publicKey != account?.publicKey) { + throw new Error('Invalid public key!!'); + } + return storedAccount; + } +} diff --git a/packages/network-core/src/services/NetworkConfigurationService.ts b/packages/network-core/src/services/NetworkConfigurationService.ts new file mode 100644 index 000000000..a5aae290b --- /dev/null +++ b/packages/network-core/src/services/NetworkConfigurationService.ts @@ -0,0 +1,279 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import _ from 'lodash'; +import { join } from 'path'; +import { + BootstrapService, + BootstrapUtils, + ConfigLoader, + ConfigResult, + ConfigService, + CryptoUtils, + CustomPreset, + Logger, + NodePreset, + NodeType, + PeerInfo, + PrivateKeySecurityMode, +} from 'symbol-bootstrap-core'; +import { NetworkType } from 'symbol-sdk'; +import { KeyStore, NetworkAccountResolver, NetworkUtils, NetworkVotingKeyFileProvider } from '.'; +import { AwsNodeData, Region, regions } from '../deployment/aws'; +import { DeploymentType, NetworkFile, NodeInformation, NodeMetadataUtils, nodesMetadata } from '../model'; + +export interface UpdateNodesParams { + nodePassword: string | undefined; + offline: boolean; + composeUser?: string; +} + +export class NetworkConfigurationService { + constructor(private readonly logger: Logger, private readonly workingDir: string, private readonly keyStore: KeyStore) {} + + public async expandNodes(): Promise { + const input = await NetworkUtils.loadNetworkInput(this.workingDir); + const { nodeTypes, ...rest } = input; + const nodes: NodeInformation[] = []; + let nodeCounter = 0; + const counters: Record = {}; + for (const nodeTypeInput of nodeTypes) { + const region: Region | undefined = + input.deploymentData.type == DeploymentType.AWS ? (nodeTypeInput as any as AwsNodeData).region : undefined; + const { total, ...everythingElse } = nodeTypeInput; + for (let index = 0; index < total; index++) { + const nickname = nodeTypeInput.nickName; + const regionIndex = region ? regions.indexOf(region) : 0; + const counterIndex = nickname + regionIndex; + counters[counterIndex] = (counters[counterIndex] || 0) + 1; + const nickNameNumber = counters[counterIndex]; + const friendlyNumber = regionIndex + NetworkUtils.zeroPad(nickNameNumber, 2); + const friendlyName = `${input.suffix}-${nickname}-${friendlyNumber}`; + const hostname = `${input.suffix}-${nickname}-${friendlyNumber}.${input.domain}`; + const metadata = nodesMetadata[nodeTypeInput.nodeType]; + const assembly = NodeMetadataUtils.getAssembly(metadata); + + const customPreset: CustomPreset = { + privateKeySecurityMode: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, + nodes: [ + { + friendlyName: friendlyName, + host: hostname, + voting: metadata.voting, + harvesting: metadata.harvesting, + dockerComposeDebugMode: false, + brokerDockerComposeDebugMode: false, + }, + ], + }; + + const node = { + number: ++nodeCounter, + friendlyName: friendlyName, + assembly: assembly, + hostname: hostname, + customPreset: customPreset, + ...everythingElse, + }; + nodes.push(node); + } + } + + if (nodes.length != _.uniqBy(nodes, (node) => node.friendlyName).length) { + throw new Error('Duplicated friendlyNames!!'); + } + if (nodes.length != _.uniqBy(nodes, (node) => node.hostname).length) { + throw new Error('Duplicated hostname!!'); + } + const output: NetworkFile = { + ...rest, + nodes: nodes, + }; + await NetworkUtils.saveNetwork(this.workingDir, output); + this.logger.info(''); + this.logger.info(`The ${NetworkUtils.NETWORK_FILE} has been saved!`); + this.logger.info(''); + return output; + } + + public async updateNodes({ nodePassword, offline, composeUser }: UpdateNodesParams): Promise { + const input = await NetworkUtils.loadNetwork(this.workingDir); + const networkPreset = await ConfigLoader.loadNetworkPreset(input.preset, this.workingDir); + const customNetwork = BootstrapUtils.isYmlFile(input.preset); + if (customNetwork && !input.nemesisSeedFolder) { + throw new Error('nemesisSeedFolder must be provided when creating nodes for a custom network!'); + } + const service = new BootstrapService(this.logger); + for (const node of input.nodes) { + const hostname = node.hostname; + this.logger.info(''); + this.logger.info(`Upgrading node ${node.number} ${hostname}`); + this.logger.info(''); + const nodeFolder = join(this.workingDir, 'nodes', `node-${NetworkUtils.zeroPad(node.number, 3)}`); + + await BootstrapUtils.mkdir(nodeFolder); + + const toStoreCustomPreset = CryptoUtils.removePrivateKeys(node.customPreset) as CustomPreset; + + const nodeCustomPreset: Partial | undefined = toStoreCustomPreset?.nodes?.[0]; + if (!nodeCustomPreset) { + throw new Error(`Node's custom preset cannot be found!`); + } + + const metadata = nodesMetadata[node.nodeType]; + if (metadata.demo) { + const faucetAccount = input.faucetBalances + ? await this.keyStore.getNetworkAccount(input.networkType, 'faucet', true) + : undefined; + toStoreCustomPreset.faucets = [ + { + repeat: faucetAccount ? 1 : 0, + privateKey: faucetAccount?.privateKey, + }, + ]; + } + if (input.nemesisSeedFolder) { + toStoreCustomPreset.nemesisSeedFolder = input.nemesisSeedFolder; + await BootstrapUtils.copyDir(join(this.workingDir, input.nemesisSeedFolder), join(nodeFolder, input.nemesisSeedFolder)); + } + + const nodeCustomPresetFileName = 'custom-preset.yml'; + await BootstrapUtils.writeYaml(join(nodeFolder, nodeCustomPresetFileName), toStoreCustomPreset, undefined); + const bootstrapTargetFolder = join(nodeFolder, 'target'); + if (BootstrapUtils.isYmlFile(input.preset)) { + await BootstrapUtils.writeYaml(join(nodeFolder, 'custom-network-preset.yml'), networkPreset, undefined); + } + const result: ConfigResult = await service.config({ + user: BootstrapUtils.CURRENT_USER, + workingDir: nodeFolder, + target: bootstrapTargetFolder, + report: false, + preset: input.preset, + reset: false, + upgrade: true, + offline: offline, + assembly: node.assembly, + password: nodePassword, + customPresetObject: toStoreCustomPreset, + accountResolver: new NetworkAccountResolver(this.logger, node, this.keyStore), + votingKeyFileProvider: new NetworkVotingKeyFileProvider(node, this.keyStore), + }); + + await service.compose( + { + user: composeUser || ConfigService.defaultParams.user, + target: bootstrapTargetFolder, + upgrade: true, + password: nodePassword, + }, + result.presetData, + result.addresses, + ); + const nodeAddresses = result.addresses.nodes?.[0]; + if (!nodeAddresses) { + throw new Error('Node addresses should have been resolved!!!'); + } + node.addresses = nodeAddresses; + // const friendlyName = node.friendlyName; + // const zipName = `${hostname}.zip`; + // const nodeRegionDir = `${flags.output}/regions/${node.region}`; + // await BootstrapUtils.mkdir(nodeRegionDir); + // await BootstrapUtils.mkdir(nodeRegionDir); + // const localZipFilePath = join(nodeRegionDir, zipName); + // await ZipUtils.zip(localZipFilePath, [ + // { + // from: nodeFolder, + // to: '', + // directory: true, + // }, + // ]); + // await BootstrapUtils.mkdir( + // join(flags.output, 'nodes', node.region), + // ); + // copyFileSync( + // localZipFilePath, + // join(flags.output, 'nodes', node.region, zipName), + // ); + } + + // if (input.nemesisData) { + // input.nemesisData.transactions = transactions; + // } + + await NetworkUtils.saveNetwork(this.workingDir, input); + this.logger.info(''); + this.logger.info(`The ${NetworkUtils.NETWORK_FILE} file has been updated!`); + this.logger.info(''); + this.logger.info(`Nodes have been created/upgraded. You can now zip and deploy them...`); + this.logger.info(''); + } + + public static async updateNetworkPreset( + networkInput: { + networkDescription: string; + networkType: NetworkType; + epochAdjustment: number; + nemesisGenerationHashSeed: string; + rewardProgramControllerApiUrl?: string; + knownRestGateways?: string[]; + knownPeers?: Record; + }, + keyStore: KeyStore, + networkPreset: CustomPreset, + ): Promise { + const networkType = networkInput.networkType; + const nemesisSignerAccount = await keyStore.getNetworkAccount(networkType, 'nemesisSigner', true); + const harvestNetworkFeeSinkAccount = await keyStore.getNetworkAccount(networkType, 'harvestNetworkFeeSink', true); + const namespaceRentalFeeSinkAccount = await keyStore.getNetworkAccount(networkType, 'namespaceRentalFeeSink', true); + const mosaicRentalFeeSinkAccount = await keyStore.getNetworkAccount(networkType, 'mosaicRentalFeeSink', true); + delete networkPreset.currencyMosaicId; + delete networkPreset.harvestingMosaicId; + if (networkInput.rewardProgramControllerApiUrl) { + networkPreset.rewardProgramControllerApiUrl = networkInput.rewardProgramControllerApiUrl; + const rewardProgramEnrollmentAccount = await keyStore.getNetworkAccount(networkType, 'rewardProgramEnrollment', true); + networkPreset.rewardProgramEnrollmentAddress = rewardProgramEnrollmentAccount.address.plain(); + } else { + delete networkPreset.rewardProgramControllerApiUrl; + delete networkPreset.rewardProgramEnrollmentAddress; + delete networkPreset.rewardProgramCaFile; + } + + delete networkPreset.currencyMosaicId; + delete networkPreset.harvestingMosaicId; + networkPreset.nemesisSeedFolder = NetworkUtils.NEMESIS_SEED_FOLDER; + networkPreset.networkDescription = networkInput.networkDescription; + networkPreset.epochAdjustment = networkInput.epochAdjustment + 's'; + networkPreset.lastKnownNetworkEpoch = 1; + networkPreset.nemesisGenerationHashSeed = networkInput.nemesisGenerationHashSeed; + networkPreset.networkType = networkType; + networkPreset.nemesisSignerPublicKey = nemesisSignerAccount.publicKey; + + networkPreset.harvestNetworkFeeSinkAddress = harvestNetworkFeeSinkAccount.address.plain(); + networkPreset.namespaceRentalFeeSinkAddress = namespaceRentalFeeSinkAccount.address.plain(); + networkPreset.mosaicRentalFeeSinkAddress = mosaicRentalFeeSinkAccount.address.plain(); + + networkPreset.knownRestGateways = networkInput.knownRestGateways; + networkPreset.knownPeers = networkInput.knownPeers; + if (!networkPreset.nemesis) { + throw new Error('Nemesis should exist when creating a new network!'); + } + if (!networkPreset.nemesis.mosaics) { + throw new Error(`Nemesis's mosaics should exist when creating a new network!`); + } + + return networkPreset; + } +} diff --git a/packages/network-core/src/services/NetworkGenesisService.ts b/packages/network-core/src/services/NetworkGenesisService.ts new file mode 100644 index 000000000..51c5040f7 --- /dev/null +++ b/packages/network-core/src/services/NetworkGenesisService.ts @@ -0,0 +1,278 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { existsSync } from 'fs'; +import * as _ from 'lodash'; +import { join } from 'path'; +import { + Assembly, + BootstrapService, + BootstrapUtils, + ConfigLoader, + ConfigService, + CryptoUtils, + CustomPreset, + KeyName, + Logger, + NemesisPreset, + PeerInfo, +} from 'symbol-bootstrap-core'; +import { AccountKeyLinkTransaction, Deadline, LinkAction, VotingKeyLinkTransaction, VrfKeyLinkTransaction } from 'symbol-sdk'; +import { nodesMetadata, TransactionInformation } from '../model'; +import { KeyStore, NetworkAccountResolver, NetworkConfigurationService, NetworkUtils } from '../services'; + +export interface KnownPeersInformation { + 'api-node': PeerInfo[]; + 'peer-node': PeerInfo[]; +} +export interface GenerateNemesisParams { + regenerate: boolean; + composeUser?: string; +} + +export class NetworkGenesisService { + constructor(private readonly logger: Logger, private readonly workingDir: string, private readonly keyStore: KeyStore) {} + + public async generateNemesis({ regenerate, composeUser }: GenerateNemesisParams): Promise { + const input = await NetworkUtils.loadNetwork(this.workingDir); + if (!BootstrapUtils.isYmlFile(input.preset) || !input.isNewNetwork) { + throw new Error(`You are creating nodes for an existing network. Nemesis cannot be generated!`); + } + if (input.nemesisSeedFolder && existsSync(input.nemesisSeedFolder) && !regenerate) { + throw new Error(`The nemesis block has been previously generated.`); + } + this.logger.info(''); + const transactions: TransactionInformation[] = []; + + const deadline = Deadline.createFromDTO('1'); + const knownPeers: KnownPeersInformation = { + 'api-node': [], + 'peer-node': [], + }; + const nemesisBalances: { + mosaicIndex: number; + address: string; + amount: number; + }[] = []; + + const service = new BootstrapService(this.logger); + const knownRestGateways = []; + const nemesisTargetFolder = join(this.workingDir, 'nemesis-target'); + const nodesFolder = join(this.workingDir, 'nodes'); + await BootstrapUtils.deleteFolder(this.logger, nemesisTargetFolder); + await BootstrapUtils.deleteFolder(this.logger, nodesFolder); + this.logger.info(''); + const networkPreset: CustomPreset = await NetworkConfigurationService.updateNetworkPreset( + input, + this.keyStore, + ConfigLoader.loadNetworkPreset(input.preset, this.workingDir), + ); + await BootstrapUtils.writeYaml(join(this.workingDir, input.preset), networkPreset, undefined); + const nemesisGenerationHashSeed = input.nemesisGenerationHashSeed; + const networkType = input.networkType; + const nemesisPreset = networkPreset.nemesis as NemesisPreset; + if (!nemesisPreset) { + throw new Error('Nemesis must be resolved from network preset!'); + } + if (!nemesisPreset.mosaics) throw new Error(`Network nemesis's mosaics must be found!`); + + const founderAccount = await this.keyStore.getNetworkAccount(networkType, 'founder', true); + for (const node of input.nodes) { + const metadata = nodesMetadata[node.nodeType]; + const hostname = node.hostname; + const nodeId = `node-${NetworkUtils.zeroPad(node.number, 3)}`; + this.logger.info(`Generating transactions and balances for node ${nodeId} ${hostname}`); + const nodeName = 'node'; + const mainAccount = await this.keyStore.getNodeAccount(networkType, KeyName.Main, nodeName, node, true); + const vrfAccount = await this.keyStore.getNodeAccount(networkType, KeyName.VRF, nodeName, node, true); + const remoteAccount = await this.keyStore.getNodeAccount(networkType, KeyName.Remote, nodeName, node, true); + const roles: string[] = []; + //Api,Peer,Voting + if (metadata.api) { + roles.push('Api'); + } + if (metadata.peer) { + roles.push('Peer'); + } + if (metadata.voting) { + roles.push('Voting'); + } + const peerInfo: PeerInfo = { + publicKey: mainAccount.publicKey, + endpoint: { + host: node.hostname, + port: 7900, + }, + metadata: { + name: node.friendlyName, + roles: roles.join(','), + }, + }; + + if (metadata.api) { + knownRestGateways.push(`http://${hostname}:3000`); + knownPeers['api-node'].push(peerInfo); + } else { + knownPeers['peer-node'].push(peerInfo); + } + + nemesisPreset.mosaics.forEach((m, mosaicIndex) => { + const nodeBalance = node.balances[mosaicIndex] || 0; + if (nodeBalance) { + const divisibility = nemesisPreset.mosaics[mosaicIndex].divisibility; + if (divisibility == undefined) { + throw new Error('Divisibility should be defined!!'); + } + nemesisBalances.push({ + mosaicIndex: mosaicIndex, + address: mainAccount.address.plain(), + amount: parseInt(nodeBalance + NetworkUtils.zeroPad(0, divisibility)), + }); + } + }); + + if (vrfAccount) { + const transaction = VrfKeyLinkTransaction.create(deadline, vrfAccount.publicKey, LinkAction.Link, networkType); + transactions.push({ + nodeNumber: node.number, + type: 'VRF', + typeNumber: 1, + payload: mainAccount.sign(transaction, nemesisGenerationHashSeed).payload, + }); + } + + if (remoteAccount) { + const transaction = AccountKeyLinkTransaction.create(deadline, remoteAccount.publicKey, LinkAction.Link, networkType); + transactions.push({ + nodeNumber: node.number, + type: 'Remote', + typeNumber: 2, + payload: mainAccount.sign(transaction, nemesisGenerationHashSeed).payload, + }); + } + + if (metadata.voting) { + const votingKeyDesiredLifetime = node.customPreset?.votingKeyDesiredLifetime || networkPreset.votingKeyDesiredLifetime; + if (!votingKeyDesiredLifetime) { + throw new Error('votingKeyDesiredLifetime must be resolved!'); + } + + const votingFileData = await this.keyStore.getVotingKeyFile(networkType, nodeName, node, 1, votingKeyDesiredLifetime); + + const transaction = VotingKeyLinkTransaction.create( + deadline, + votingFileData.publicKey, + votingFileData.startEpoch, + votingFileData.endEpoch, + LinkAction.Link, + networkType, + 1, + ); + transactions.push({ + nodeNumber: node.number, + type: 'Voting', + typeNumber: 3, + payload: mainAccount.sign(transaction, nemesisGenerationHashSeed).payload, + }); + } + } + const nemesisSigner = await this.keyStore.getNetworkAccount(networkType, 'nemesisSigner', false); + networkPreset.knownPeers = knownPeers; + networkPreset.knownRestGateways = knownRestGateways; + await BootstrapUtils.writeYaml(join(this.workingDir, input.preset), networkPreset, undefined); + this.logger.info(''); + this.logger.info(`The ${input.preset} file has been updated!`); + this.logger.info(''); + const nemesisTransactions: Record = _.mapValues( + _.keyBy(transactions, (transaction) => NetworkUtils.getTransactionKey(transaction)), + (transaction) => transaction.payload, + ); + + const faucetBalances = input.faucetBalances; + const faucetAccount = faucetBalances ? await this.keyStore.getNetworkAccount(networkType, 'faucet', true) : undefined; + if (faucetBalances && faucetAccount) { + nemesisPreset.mosaics.forEach((m, mosaicIndex) => { + const faucetBalance = input.faucetBalances?.[mosaicIndex]; + if (faucetBalance) { + const divisibility = nemesisPreset.mosaics[mosaicIndex].divisibility; + if (divisibility == undefined) { + throw new Error('Divisibility should be defined!!'); + } + nemesisBalances.push({ + mosaicIndex: mosaicIndex, + address: faucetAccount.address.plain(), + amount: parseInt(faucetBalance + NetworkUtils.zeroPad(0, divisibility)), + }); + } + }); + } + + const nemesisCustomPreset: CustomPreset = { + nemesisSeedFolder: '', + nodes: [ + { + excludeFromNemesis: true, // Don't include this node links or balances!!! + friendlyName: 'nemesis-private-node', + host: 'nemesis-private-node', + }, + ], + nemesis: { + nemesisSignerPrivateKey: nemesisSigner.privateKey, + mosaics: nemesisPreset.mosaics.map((m, index) => ({ + accounts: [founderAccount.publicKey], + currencyDistributions: nemesisBalances.filter((n) => n.mosaicIndex === index).map(({ mosaicIndex, ...rest }) => rest), + })), + transactions: nemesisTransactions, + }, + faucets: [ + { + repeat: faucetAccount ? 1 : 0, + privateKey: faucetAccount?.privateKey, + }, + ], + }; + this.logger.info(`Generating nemesis block...`); + this.logger.info(''); + const node = input.nodes.find(async (node) => { + const metadata = nodesMetadata[node.nodeType]; + return metadata.harvesting; + }); + if (!node) { + throw new Error('No Candidate Node!!'); + } + await service.config({ + user: BootstrapUtils.CURRENT_USER, + accountResolver: new NetworkAccountResolver(this.logger, node, this.keyStore), + workingDir: this.workingDir, + target: nemesisTargetFolder, + preset: input.preset, + upgrade: false, + reset: true, + report: true, + assembly: Assembly.demo, + customPresetObject: nemesisCustomPreset, + }); + await service.compose({ + target: nemesisTargetFolder, + user: composeUser || ConfigService.defaultParams.user, + upgrade: true, + }); + const nemesisSeedFolder = NetworkUtils.NEMESIS_SEED_FOLDER; + await BootstrapUtils.copyDir(join(nemesisTargetFolder, 'nemesis', 'seed'), join(this.workingDir, nemesisSeedFolder)); + input.nemesisSeedFolder = nemesisSeedFolder; + await NetworkUtils.saveNetwork(this.workingDir, CryptoUtils.removePrivateKeys(input)); + return nemesisTargetFolder; + } +} diff --git a/packages/network-core/src/services/NetworkHealthCheckService.ts b/packages/network-core/src/services/NetworkHealthCheckService.ts new file mode 100644 index 000000000..6bf5591ca --- /dev/null +++ b/packages/network-core/src/services/NetworkHealthCheckService.ts @@ -0,0 +1,432 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import https from 'https'; +import * as _ from 'lodash'; +import { Socket } from 'net'; +import { KeyName, Logger, RewardProgram } from 'symbol-bootstrap-core'; +import { NodeStatusEnum } from 'symbol-openapi-typescript-fetch-client'; +import { AccountLinkVotingKey, Address, FinalizationProof } from 'symbol-sdk'; +import { NetworkUtils, NodeInformation, nodesMetadata, Region } from '../'; + +export interface ReportLine { + readonly message: string; + readonly status: 'error' | 'warning' | 'success' | 'info'; +} + +export class Report { + readonly lines: ReportLine[] = []; + error(message: string): void { + this.lines.push({ + message, + status: 'error', + }); + } + warning(message: string): void { + this.lines.push({ + message, + status: 'warning', + }); + } + success(message: string): void { + this.lines.push({ + message, + status: 'success', + }); + } + info(message: string): void { + this.lines.push({ + message, + status: 'info', + }); + } + add(report: Report, prefix = ''): void { + report.lines.forEach((line) => { + this.lines.push({ + message: `${prefix}${line.message}`, + status: line.status, + }); + }); + } + withError(): boolean { + return !!this.lines.find((l) => l.status === 'error'); + } +} + +interface NodeData { + height: number; + finalizedHeight: number; + finalizedEpoch: number; + serverVersion: number; + bestRestUrl: string; +} + +export interface HealthCheckParams { + timeout: number; + maxBlockDiff: number; + maxFinalizedBlockDiff: number; + region: Region | undefined; +} + +export class NetworkHealthCheckService { + constructor(private readonly logger: Logger, private readonly workingDir: string) {} + + public async healthCheck(flags: HealthCheckParams): Promise { + const input = await NetworkUtils.loadNetwork(this.workingDir); + const timeout = flags.timeout; + const bestNodeInfo = await this.getBestNodeInfo(input.nodes, timeout); + if (!bestNodeInfo.bestRestUrl) { + throw new Error('There are not running nodes. Have you deployed?'); + } + const bestNodeRepositoryFactory = NetworkUtils.createRepositoryFactory(bestNodeInfo.bestRestUrl, timeout); + const finalizationData = await bestNodeRepositoryFactory + .createFinalizationRepository() + .getFinalizationProofAtEpoch(bestNodeInfo.finalizedEpoch) + .toPromise(); + + const reports = await Promise.all( + input.nodes.map(async (node) => { + const report = new Report(); + report.info(`Testing node ${node.hostname}`); + const metadata = nodesMetadata[node.nodeType]; + report.add(await this.testServer(node, timeout)); + if (metadata.api) { + report.add(await this.testRestGateway(node, bestNodeInfo, timeout, flags.maxBlockDiff, flags.maxFinalizedBlockDiff)); + } + if (this.getRewardProgram(node)) { + report.add(await this.testAgent(node, timeout)); + } + report.add(await this.testAccounts(node, bestNodeInfo, timeout)); + if (metadata.voting) { + report.add(await this.testFinalization(node, finalizationData)); + } + return { node: node, report: report }; + }), + ); + + reports.forEach((r) => { + this.logger.info('--------'); + r.report.lines.forEach((line) => { + if (line.status === 'error') this.logger.error(`${line.message}`); + if (line.status === 'warning') this.logger.warn(`${line.message}`); + if (line.status === 'success') this.logger.info(`${line.message}`); + if (line.status === 'info') this.logger.info(`${line.message}`); + }); + }); + const failed = reports.filter((r) => r.report.withError()); + if (failed.length) { + this.logger.error(''); + this.logger.error('THERE HAS BEEN SOME ERRORS: Summary:'); + this.logger.error(''); + failed.forEach((r) => { + this.logger.error('--------'); + this.logger.error(`${r.node.hostname}`); + r.report.lines.forEach((line) => { + if (line.status === 'error') this.logger.error(`${line.message}`); + }); + }); + process.exit(100); + } else { + this.logger.info(''); + this.logger.info('Nodes looks ok!'); + this.logger.info(''); + process.exit(0); + } + } + + private getRewardProgram(node: NodeInformation): RewardProgram | undefined { + return node.customPreset?.nodes?.[0].rewardProgram; + } + + private async getBestNodeInfo(nodes: NodeInformation[], timeout: number): Promise { + const values = await Promise.all( + nodes + .filter((node) => { + const metadata = nodesMetadata[node.nodeType]; + return metadata.api; + }) + .map(async (node) => { + try { + const url = NetworkUtils.resolveRestUrl(node.hostname); + const repositoryFactory = NetworkUtils.createRepositoryFactory(url, timeout); + const chainInfo = await repositoryFactory.createChainRepository().getChainInfo().toPromise(); + const nodeInfo = await repositoryFactory.createNodeRepository().getNodeInfo().toPromise(); + return { + height: chainInfo.height.compact(), + finalizedHeight: chainInfo.latestFinalizedBlock.height.compact(), + finalizedEpoch: chainInfo.latestFinalizedBlock.finalizationEpoch, + serverVersion: nodeInfo.version, + bestRestUrl: url, + }; + } catch (e) { + return { + height: 0, + finalizedHeight: 0, + finalizedEpoch: 0, + serverVersion: 0, + bestRestUrl: '', + }; + } + }), + ); + + return values.reduce( + (a, b) => { + return { + height: Math.max(a.height, b.height), + finalizedHeight: Math.max(a.finalizedHeight, b.finalizedHeight), + finalizedEpoch: Math.max(a.finalizedEpoch, b.finalizedEpoch), + serverVersion: Math.max(a.serverVersion, b.serverVersion), + bestRestUrl: a.height > b.height ? a.bestRestUrl : b.bestRestUrl, + }; + }, + { height: 0, finalizedHeight: 0, finalizedEpoch: 0, serverVersion: 0, bestRestUrl: '' }, + ); + } + + private async testRestGateway( + node: NodeInformation, + maxNodeData: NodeData, + timeout: number, + maxBlockDiff: number, + maxFinalizedBlockDiff: number, + ): Promise { + const report = new Report(); + const url = NetworkUtils.resolveRestUrl(node.hostname); + const repositoryFactory = NetworkUtils.createRepositoryFactory(url, timeout); + const nodeRepository = repositoryFactory.createNodeRepository(); + const testUrl = `${url}/node/health`; + report.success(`Testing ${testUrl}`); + try { + const healthStatus = await nodeRepository.getNodeHealth().toPromise(); + if (healthStatus.apiNode === NodeStatusEnum.Down) { + report.error(`Rest ${testUrl} is NOT up and running: Api Node is still Down!`); + } else if (healthStatus.db === NodeStatusEnum.Down) { + report.error(`Rest ${testUrl} is NOT up and running: DB is still Down!`); + } else { + report.success(`Rest ${testUrl} is up and running...`); + } + } catch (e) { + report.error(`Rest ${testUrl} is NOT up and running: ${e.message}`); + } + + try { + const chainInfo = await repositoryFactory.createChainRepository().getChainInfo().toPromise(); + const nodeHeight = chainInfo.height.compact(); + const nodeFinalizedHeight = chainInfo.latestFinalizedBlock.height.compact(); + const nodeFinalizationEpoch = chainInfo.latestFinalizedBlock.finalizationEpoch; + + if (nodeHeight < maxNodeData.height - maxBlockDiff) { + report.error(`Node ${node.hostname} height is ${nodeHeight} when current is ${maxNodeData.height}`); + } else { + report.success(`Node ${node.hostname} height is ${nodeHeight} out of ${maxNodeData.height}`); + } + if (nodeFinalizedHeight < maxNodeData.finalizedHeight - maxFinalizedBlockDiff) { + report.error( + `Node ${node.hostname} finalized height is ${nodeFinalizedHeight} when current is ${maxNodeData.finalizedHeight}`, + ); + } else { + report.success(`Node ${node.hostname} finalized height is ${nodeFinalizedHeight} out of ${maxNodeData.finalizedHeight}`); + } + if (nodeFinalizationEpoch < maxNodeData.finalizedEpoch - 1) { + report.error( + `Node ${node.hostname} finalized epoch is ${nodeFinalizationEpoch} when current is ${maxNodeData.finalizedEpoch}`, + ); + } else { + report.success(`Node ${node.hostname} finalized epoch is ${nodeFinalizationEpoch} out of ${maxNodeData.finalizedEpoch}`); + } + } catch (e) { + report.error(`Rest ${url}/chain/info error: ${e.message}`); + } + + try { + const nodeInfo = await repositoryFactory.createNodeRepository().getNodeInfo().toPromise(); + if (nodeInfo.version < maxNodeData.serverVersion) { + report.error(`Node ${node.hostname} version is ${nodeInfo.version} when current is ${maxNodeData.serverVersion}`); + } else { + report.success(`Node ${node.hostname} version is ${nodeInfo.version} out of ${maxNodeData.serverVersion}`); + } + } catch (e) { + report.error(`Rest ${url}/node/info error: ${e.message}`); + } + return report; + } + + private async testAccounts(node: NodeInformation, maxNodeData: NodeData, timeout: number): Promise { + const report = new Report(); + const metadata = nodesMetadata[node.nodeType]; + if (!metadata.voting && !metadata.harvesting) { + return report; + } + const url = maxNodeData.bestRestUrl; + const repositoryFactory = NetworkUtils.createRepositoryFactory(url, timeout); + if (!node.addresses?.main.address) { + throw new Error('node.addresses?.main.address must be defined'); + } + const address = Address.createFromRawAddress(node.addresses.main.address); + const accountRepository = repositoryFactory.createAccountRepository(); + report.success(`Testing accounts ${url}/accounts/${address.plain()}`); + const verify = (keyName: KeyName, expectedKey: string | undefined, currentKey: string | undefined) => { + if (expectedKey === currentKey) { + report.success(`${keyName} is correct, value ${currentKey}`); + } else { + report.error(`${keyName} is invalid, expected ${expectedKey} but got ${currentKey}`); + } + }; + const verifyVoting = (expected: AccountLinkVotingKey, current: AccountLinkVotingKey, keyNumber: number) => { + const expectedKey = Object.values(expected).join(' - '); + const currentKey = Object.values(current).join(' - '); + if (expectedKey === currentKey) { + report.success(`Voting Key ${keyNumber} is correct, current is ${currentKey}`); + } else { + report.error(`Voting Key ${keyNumber} is invalid, expected ${expectedKey} but got ${currentKey}`); + } + }; + try { + const accountInfo = await accountRepository.getAccountInfo(address).toPromise(); + if (metadata.harvesting) { + verify(KeyName.VRF, node.addresses?.vrf?.publicKey, accountInfo.supplementalPublicKeys.vrf?.publicKey); + verify(KeyName.Remote, node.addresses?.remote?.publicKey, accountInfo.supplementalPublicKeys.linked?.publicKey); + } + if (metadata.voting) { + const expectedVotingData: AccountLinkVotingKey[] = (node.addresses?.voting?.map(({ filename, ...k }) => k) || []) + .sort((a, b) => a.startEpoch - b.startEpoch) + .filter((a) => a.endEpoch >= maxNodeData.finalizedEpoch) + .slice(0, 3); + const currentVotingData: AccountLinkVotingKey[] = (accountInfo.supplementalPublicKeys.voting || []) + .sort((a, b) => a.startEpoch - b.startEpoch) + .filter((a) => a.endEpoch >= maxNodeData.finalizedEpoch); + if (expectedVotingData.length != currentVotingData.length) { + report.error(`Expected voting keys is ${expectedVotingData.length} but got ${currentVotingData.length}`); + } + _.zip(expectedVotingData, currentVotingData).forEach( + ([expected, current], index) => expected && current && verifyVoting(expected, current, index + 1), + ); + + const currentVotingKey = currentVotingData.find( + (v) => v.startEpoch <= maxNodeData.finalizedEpoch && maxNodeData.finalizedEpoch <= v.endEpoch, + ); + if (currentVotingKey) { + report.info( + `The current voting key will expire in ${currentVotingKey.endEpoch - maxNodeData.finalizedEpoch} epochs at epoch ${ + currentVotingKey.endEpoch + }`, + ); + } else { + report.error(`There is not active voting key at epoch ${maxNodeData.finalizedEpoch}!!!!`); + } + } + } catch (e) { + report.error(`Account ${node.addresses?.main.address} could not be loaded. Error: ${e.message}`); + } + return report; + } + + private async testAgent(node: NodeInformation, timeout: number): Promise { + const report = new Report(); + const url = `https://${node.hostname}:7881`; + const testUrl = `${url}/metadata`; + report.info(`Testing ${testUrl}`); + try { + const response = await new Promise((resolve, reject) => { + try { + const req = https.request(testUrl, { rejectUnauthorized: false, timeout: timeout }, (res) => { + let str = ''; + res.on('data', (chunk) => { + str += chunk; + }); + + res.on('end', () => { + resolve(str); + }); + }); + req.on('error', reject); + req.end(); + } catch (e) { + reject(e); + } + }); + const metadata = JSON.parse(response); + if (metadata.authorized || !metadata.rewardProgram || !metadata.mainPublicKey) { + report.error(`Agent ${testUrl} is NOT up and running: Invalid response ${response}`); + } else { + const rewardProgram = this.getRewardProgram(node); + if (metadata.rewardProgram !== rewardProgram) { + report.error( + `Agent ${testUrl} is NOT up and running: Invalid reward program, expected ${rewardProgram} but got ${metadata.rewardProgram}`, + ); + } else { + report.success(`Agent ${testUrl} is up and running...`); + } + } + } catch (e) { + report.error(`Agent ${testUrl} is NOT up and running: ${e.message}`); + } + return report; + } + + private async testFinalization(node: NodeInformation, finalizationData: FinalizationProof): Promise { + const report = new Report(); + report.info(`Testing finalization ${finalizationData.finalizationEpoch}`); + const votingFile = node.addresses?.voting?.find( + (v) => v.startEpoch <= finalizationData.finalizationEpoch && finalizationData.finalizationEpoch <= v.endEpoch, + ); + if (votingFile) { + const messageGroup = finalizationData.messageGroups.find((g) => + g.signatures.find((s) => s.root.parentPublicKey.toUpperCase() === votingFile.publicKey.toUpperCase()), + ); + if (messageGroup) { + report.success( + `Voting public key ${votingFile.publicKey} has been used to finalize epoch ${finalizationData.finalizationEpoch}`, + ); + } else { + report.error( + `Voting public key ${votingFile.publicKey} has NOT been used to finalize epoch ${finalizationData.finalizationEpoch}`, + ); + } + } else { + report.error(`There is no voting file at epoch ${finalizationData.finalizationEpoch}`); + } + return report; + } + + private async testServer(node: NodeInformation, timeout: number): Promise { + const report = new Report(); + const port = 7900; + const host = node.hostname; + report.success(`Testing ${host} port ${port}`); + const sock = new Socket(); + sock.setTimeout(timeout); + return new Promise((resolve) => { + sock.on('connect', () => { + report.success(`${host} port ${port} is up.`); + sock.destroy(); + resolve(report); + }) + .on('error', (e) => { + report.error(`${host} port ${port} is down: ${e.message}`); + resolve(report); + }) + .on('timeout', () => { + report.error(`${host} port ${port} is down: timeout`); + resolve(report); + }) + .connect({ + host, + port, + }); + }); + } +} diff --git a/packages/network-core/src/services/NetworkLinkService.ts b/packages/network-core/src/services/NetworkLinkService.ts new file mode 100644 index 000000000..617ac8b9b --- /dev/null +++ b/packages/network-core/src/services/NetworkLinkService.ts @@ -0,0 +1,57 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { join } from 'path'; +import { AnnounceService, ConfigLoader, LinkTransactionGenericFactory, Logger, RemoteNodeService } from 'symbol-bootstrap-core'; +import { KeyStore, NetworkUtils } from '.'; +import { NetworkAccountResolver } from './NetworkAccountResolver'; + +export interface LinkNodesParams { + password: string | undefined; + unlink: boolean; + maxFee: number | undefined; +} + +export class NetworkLinkService { + constructor(private readonly logger: Logger, private readonly workingDir: string, private readonly keyStore: KeyStore) {} + + public async linkNodes({ password, unlink, maxFee }: LinkNodesParams): Promise { + const configLoader = new ConfigLoader(this.logger); + const input = await NetworkUtils.loadNetwork(this.workingDir); + const networkPreset = ConfigLoader.loadNetworkPreset(input.preset, this.workingDir); + if (!networkPreset.knownRestGateways?.length) { + throw new Error('Rest gateways could not be resolved!!!'); + } + const repositoryInfo = await new RemoteNodeService(this.logger).getBestRepositoryInfo(networkPreset.knownRestGateways); + + for (const node of input.nodes) { + const service = new AnnounceService(this.logger, new NetworkAccountResolver(this.logger, node, this.keyStore)); + const nodeFolder = join('nodes', `node-${NetworkUtils.zeroPad(node.number, 3)}`); + this.logger.info(''); + this.logger.info(`Linking node ${node.number} ${node.friendlyName}`); + this.logger.info(''); + const bootstrapTargetFolder = join(nodeFolder, 'target'); + const targetPreset = configLoader.loadExistingPresetData(bootstrapTargetFolder, password); + const addresses = configLoader.loadExistingAddresses(bootstrapTargetFolder, password); + this.logger.info(`${unlink ? 'Unlinking' : 'Linking'} nodes`); + const presetData = configLoader.mergePresets(targetPreset, node.customPreset); + const transactionFactory = new LinkTransactionGenericFactory(this.logger, async () => true, unlink); + await service.announce(repositoryInfo.repositoryFactory, maxFee, true, presetData, addresses, transactionFactory); + this.logger.info(''); + this.logger.info('-----'); + } + } +} diff --git a/packages/network-core/src/services/NetworkService.ts b/packages/network-core/src/services/NetworkService.ts new file mode 100644 index 000000000..744caf90d --- /dev/null +++ b/packages/network-core/src/services/NetworkService.ts @@ -0,0 +1,52 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Logger } from 'symbol-bootstrap-core'; +import { + GenerateNemesisParams, + HealthCheckParams, + KeyStore, + LinkNodesParams, + NetworkConfigurationService, + NetworkFile, + NetworkGenesisService, + NetworkHealthCheckService, + NetworkLinkService, + UpdateNodesParams, +} from '../'; + +export class NetworkService { + constructor(private readonly logger: Logger, private readonly workingDir: string) {} + + expandNodes(keyStore: KeyStore): Promise { + return new NetworkConfigurationService(this.logger, this.workingDir, keyStore).expandNodes(); + } + + generateNemesis(keyStore: KeyStore, params: GenerateNemesisParams): Promise { + return new NetworkGenesisService(this.logger, this.workingDir, keyStore).generateNemesis(params); + } + + healthCheck(params: HealthCheckParams): Promise { + return new NetworkHealthCheckService(this.logger, this.workingDir).healthCheck(params); + } + + linkNodes(keyStore: KeyStore, params: LinkNodesParams): Promise { + return new NetworkLinkService(this.logger, this.workingDir, keyStore).linkNodes(params); + } + + updateNodes(keyStore: KeyStore, params: UpdateNodesParams): Promise { + return new NetworkConfigurationService(this.logger, this.workingDir, keyStore).updateNodes(params); + } +} diff --git a/packages/network-core/src/services/NetworkUtils.ts b/packages/network-core/src/services/NetworkUtils.ts new file mode 100644 index 000000000..5d54750b3 --- /dev/null +++ b/packages/network-core/src/services/NetworkUtils.ts @@ -0,0 +1,101 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { existsSync } from 'fs'; +import * as _ from 'lodash'; +import fetch from 'node-fetch'; +import { join } from 'path'; +import { BootstrapUtils, CryptoUtils } from 'symbol-bootstrap-core'; +import { RepositoryFactory, RepositoryFactoryHttp } from 'symbol-sdk'; +import { NetworkFile, NetworkInputFile, TransactionInformation } from '../model'; + +export class NetworkUtils { + public static readonly NETWORK_INPUT_FILE = 'network-input.yml'; + public static readonly NETWORK_FILE = 'network.yml'; + public static readonly NETWORK_PRESET_FILE = 'custom-network-preset.yml'; + public static readonly KEY_STORE_FILE = 'key-store.yml'; + public static readonly NEMESIS_SEED_FOLDER = 'nemesis-seed'; + + public static capitalizeFirstLetter(string: string): string { + return string.charAt(0).toUpperCase() + string.slice(1); + } + public static zeroPad(num: number, places: number): string { + return String(num).padStart(places, '0'); + } + + public static getTransactionKey(transaction: TransactionInformation): string { + return `${transaction.typeNumber}_${transaction.type}_${this.zeroPad(transaction.nodeNumber, 5)}`; + } + + public static startCase(s: string): string { + return _.startCase(s); + } + + public static async loadNetworkInput(workingDir: string): Promise { + const inputFile = join(workingDir, this.NETWORK_INPUT_FILE); + if (!existsSync(inputFile)) { + throw new Error(`Input File ${inputFile} does not exist`); + } + const input = (await BootstrapUtils.loadYaml(inputFile, undefined)) as NetworkInputFile; + //Add validation; + return input; + } + + public static async loadNetwork(workingDir: string): Promise { + const inputFile = join(workingDir, this.NETWORK_FILE); + if (!existsSync(inputFile)) { + throw new Error(`Input File ${inputFile} does not exist`); + } + const input = (await BootstrapUtils.loadYaml(inputFile, undefined)) as NetworkFile; + //Add validation; + return input; + } + + public static async saveNetwork(workingDir: string, network: NetworkFile): Promise { + const outputFile = join(workingDir, this.NETWORK_FILE); + await BootstrapUtils.writeYaml(outputFile, CryptoUtils.removePrivateKeys(network), undefined); + } + + public static async saveNetworkInput(workingDir: string, network: NetworkInputFile): Promise { + const outputFile = join(workingDir, this.NETWORK_INPUT_FILE); + await BootstrapUtils.writeYaml(outputFile, CryptoUtils.removePrivateKeys(network), undefined); + } + + public static resolveRestUrl(hostname: string): string { + const url = `http://${hostname}:3000`; + // improve this when there is SSL involved. + return url; + } + + public static createRepositoryFactory(url: string, timeout: number | undefined): RepositoryFactory { + const repositoryFactory = new RepositoryFactoryHttp(url, { + fetchApi: NetworkUtils.fetchWithTimeout(timeout), + }); + return repositoryFactory; + } + public static fetchWithTimeout = (timeout: number | undefined) => { + if (timeout === undefined) { + return fetch; + } else { + return async (resource: any, options: any): Promise => { + options.timeout = timeout; + return fetch(resource, { + ...options, + timeout, + }); + }; + } + }; +} diff --git a/packages/network-core/src/services/NetworkVotingKeyFileProvider.ts b/packages/network-core/src/services/NetworkVotingKeyFileProvider.ts new file mode 100644 index 000000000..eb3e12671 --- /dev/null +++ b/packages/network-core/src/services/NetworkVotingKeyFileProvider.ts @@ -0,0 +1,36 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { writeFileSync } from 'fs'; +import { join } from 'path'; +import { VotingKeyFile, VotingKeyFileProvider, VotingKeyParams } from 'symbol-bootstrap-core'; +import { KeyStore, NodeInformation } from '../'; + +export class NetworkVotingKeyFileProvider implements VotingKeyFileProvider { + constructor(private readonly node: NodeInformation, private readonly keyStore: KeyStore) {} + + async createVotingFile(params: VotingKeyParams): Promise { + const votingFile = await this.keyStore.getVotingKeyFile( + params.presetData.networkType, + params.nodePreset.name, + this.node, + params.votingKeyStartEpoch, + params.votingKeyEndEpoch, + ); + writeFileSync(join(params.votingKeysFolder, params.privateKeyTreeFileName), votingFile.fileContent); + return { ...votingFile, filename: params.privateKeyTreeFileName }; + } +} diff --git a/packages/network-core/src/services/index.ts b/packages/network-core/src/services/index.ts new file mode 100644 index 000000000..52f14eff1 --- /dev/null +++ b/packages/network-core/src/services/index.ts @@ -0,0 +1,11 @@ +// created from 'create-ts-index' + +export * from './KeyStore'; +export * from './NetworkAccountResolver'; +export * from './NetworkConfigurationService'; +export * from './NetworkGenesisService'; +export * from './NetworkHealthCheckService'; +export * from './NetworkLinkService'; +export * from './NetworkService'; +export * from './NetworkUtils'; +export * from './NetworkVotingKeyFileProvider'; diff --git a/packages/network-core/test/networkExamples/network1-expected/custom-network-preset.yml b/packages/network-core/test/networkExamples/network1-expected/custom-network-preset.yml new file mode 100644 index 000000000..36dd9d6d0 --- /dev/null +++ b/packages/network-core/test/networkExamples/network1-expected/custom-network-preset.yml @@ -0,0 +1,546 @@ +assemblies: 'api, dual, peer' +networkDescription: My Company Private Test Network +baseNamespace: symbol +batchVerificationRandomSource: /dev/urandom +harvestBeneficiaryPercentage: 25 +epochAdjustment: 1626086470s +enableRevoteOnBoot: false +maxHarvesterBalance: 50000000000000 +maxMosaicAtomicUnits: 8999999999000000 +minHarvesterBalance: 10000000000 +minVoterBalance: 3000000000000 +nemesisGenerationHashSeed: 3EC4F5010EAD8F4439241F242611C292CE569587D571A80AD2E73511BE820387 +nemesisSeedFolder: nemesis-seed +harvestNetworkFeeSinkAddress: VDQPJMHDSOLJJK2FQ74Y4A3QW53H4VL2IDANWHA +namespaceRentalFeeSinkAddress: VD2CN6AP3ESMBYSPI745LXPIKDAXZVSS2BE6ZKY +mosaicRentalFeeSinkAddress: VCPXHM2CDC6XRIOEE5Y3UE6Q25FNHSDAV6XKQMI +nemesisSignerPublicKey: E3C35191472508C4C50EE5ACE383C5D03E3A5B15D721ADEE1E03840DA95A01B4 +networkType: 168 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: VDDBKWC2VVINIVYKTD5LEKOPMAHTPWNNI3OUYMY +rewardProgramControllerApiUrl: 'http://myc-node-monitoring.mycompany.com:7890' +totalChainImportance: 7842928625000000 +initialCurrencyAtomicUnits: 7842928625000000 +importanceGrouping: 180 +votingSetGrouping: 720 +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +minVotingKeyLifetime: 28 +maxVotingKeyLifetime: 720 +stepDuration: 4m +maxBlockFutureTime: 300ms +maxAccountRestrictionValues: 100 +maxSecretLockDuration: 365d +maxNamespaceDuration: 1825d +minNamespaceDuration: 30d +namespaceGracePeriodDuration: 1d +blockGenerationTargetTime: 30s +defaultDynamicFeeMultiplier: 100 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +mosaicRentalFee: 500000 +throttlingBurst: 80 +throttlingRate: 60 +fileDatabaseBatchSize: 100 +minProofSize: 0 +syncTimeout: 5m +maxChildNamespaces: 100 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +timeSynchronizationMinImportance: 10000000000 +faucetUrl: 'http://faucet.testnet.symboldev.network' +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - B5037858670D0C21439BC124F11BC51347FB9698BEF2FFCA209D00E6634C77D7 +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +knownRestGateways: + - 'http://myc-demo--101.mycompany.com:3000' + - 'http://myc-dual-301.mycompany.com:3000' + - 'http://myc-dual-302.mycompany.com:3000' +knownPeers: + api-node: + - + publicKey: ACD05DF9457F27F813D648E117B2C3256057715646D9E0EBDEC9C87A89B4A24D + endpoint: + host: myc-demo--101.mycompany.com + port: 7900 + metadata: + name: myc-demo--101 + roles: 'Api,Peer' + - + publicKey: 3F4363A16CB8A6BED1F5DB4093BBE63E4DD795C19C2DA3081AC228BDF4A18AEF + endpoint: + host: myc-dual-301.mycompany.com + port: 7900 + metadata: + name: myc-dual-301 + roles: 'Api,Peer' + - + publicKey: D336B6C12FBA12FB3C69EFE11A3E041E91F5FBC63D4D3B14C2AC6EADCA403F5E + endpoint: + host: myc-dual-302.mycompany.com + port: 7900 + metadata: + name: myc-dual-302 + roles: 'Api,Peer' + peer-node: + - + publicKey: E6DC8EC8A444A99DC8D27E68231374658DB3F971FA059A508335418E2C39C99D + endpoint: + host: myc-peer-101.mycompany.com + port: 7900 + metadata: + name: myc-peer-101 + roles: 'Peer,Voting' + - + publicKey: D7E8B4741515F3B2F85B7E00B53DE54D6B8943E9213AFDA0BD8FFE7A6147A634 + endpoint: + host: myc-peer-102.mycompany.com + port: 7900 + metadata: + name: myc-peer-102 + roles: 'Peer,Voting' + - + publicKey: B64B61FBF67681BC2125E4B68E76D798F0C9F37911BD09988C2CE009DB94D3D7 + endpoint: + host: myc-beacon-001.mycompany.com + port: 7900 + metadata: + name: myc-beacon-001 + roles: 'Peer,Voting' diff --git a/packages/network-core/test/networkExamples/network1-expected/key-store.yml b/packages/network-core/test/networkExamples/network1-expected/key-store.yml new file mode 100644 index 000000000..c7c89f108 --- /dev/null +++ b/packages/network-core/test/networkExamples/network1-expected/key-store.yml @@ -0,0 +1,179 @@ +nodes: + node-1: + Main: + privateKey: FA950CD253FF4404EF91B0A36CC0A5D08A6ACA1B6C79F50854C27C672B82F69E + publicKey: ACD05DF9457F27F813D648E117B2C3256057715646D9E0EBDEC9C87A89B4A24D + address: VA2T35DRT57PG6NDBEAXRV3H424FUXNPPOYXYGQ + VRF: + privateKey: BFD116738C8A02E4C9619F1E4AD80DD2AD0E519D33071D9E83B7F5C834C74535 + publicKey: 30D87B47F4EA4B0F086D9826B49ED105D123A87D447289C88021364F4DFD5D5F + address: VATAVDCPTI3YJZUWJGVCQJPNHZ2VIW4IYTEXTOA + Remote: + privateKey: F6BD8B7A6A145D1D0A97407B1BA48FDA6F03A8E70BF3F430C5AB03A4E2D1E043 + publicKey: 139F6E6ABAFCD7AD8F6BDFF9FA7AE680302400471DF1FA9D93BD821F35F9B703 + address: VAJZJJFHFQDRNLVOMKS6PNVHZTT2FGB45DDO4NI + Transport: + privateKey: 088FC2D89AF9BDA05FC998E28AED80BD3A76D07A794765CC7EFEEA3F94A9E705 + publicKey: F4181A831545AD63BBE972172AA848CF67F6B7AA4BF17CA397D6F14869E653E1 + address: VAQ4CFLFZVXTHKGEXQHB2AK7EPZEXU7TBOHWKRQ + node-2: + Main: + privateKey: D61E51CC9143483DFE375F73AC6F5949B4A9442E040CEC715524C396C893085A + publicKey: 3F4363A16CB8A6BED1F5DB4093BBE63E4DD795C19C2DA3081AC228BDF4A18AEF + address: VDVLR4DP7UA5U4XBFPMWQSU2CKVY2M6H2AY5L3I + VRF: + privateKey: 8649E8D06B33C82ABABC418C62DAF4E683F2C8101762CABF8383675C7CEA5339 + publicKey: 1E67463D6E5F5D184F85453111D4E73C1D128595FFA50AD0BF00ADD1D300054F + address: VAHEQZF5MGIZ77KT2IAUQO7EQFR34HXSFQWI7OA + Remote: + privateKey: 5A5B9B25AFBD891E482F25FA37F81559E6902B1231E604FB6D3B8691C2EDF1B2 + publicKey: 09200207F254D556760F199FFE5B0E0DC510F4F35F3D8A55A745567214E3BF54 + address: VDJ5HCE556XR36ABZHGL7HY6BCWLS7YM2EDYH5A + Transport: + privateKey: CA1D5B37C8C5F6AB085DEF7D7F844F654EE79E7BCFFDC2175E984548C9082AD9 + publicKey: D9D4E3BDE3EB76F7A23088F2FDD843BAB400B68164AFB0AAEDB89B8805505518 + address: VB2AFSAVPBP5I3ZMT6ETKYJS7RIWQI62NXTCKUY + node-3: + Main: + privateKey: F985E23F7886B4F79C93A47AC1FC60B9B83FAC5B38F220B5D5D56F6A2C6D9F4E + publicKey: D336B6C12FBA12FB3C69EFE11A3E041E91F5FBC63D4D3B14C2AC6EADCA403F5E + address: VAJCM6K2UZCXLH6XDNPIBXRJFSMR4VBHAN5OCNI + VRF: + privateKey: 7F35B1F5DDE2495011F0894120D7F4C215B79173F4682D20996DF1A59166A2F7 + publicKey: E65F80B3986E2F6729D4A6CAD27CE79A777CE6A4442DB227BF5AB03BEAA581BE + address: VDXUID3LULDOD66NWTDAHXGULERHNJRMP5DCFFQ + Remote: + privateKey: 63308B57494ED26C2144A4291F0C21970D7FA01DFAD01955800C00C704F75B35 + publicKey: 1A53070EB5AE38FED9C83AE2260C1E2F2F0A6283FACE7C4AE5E5164110FE1D15 + address: VDEXAKC5QFW2GB24SHPOUFJQQEWXAJEDOTPJLDY + Transport: + privateKey: 191BDEEF7604B3EF3C2C1472F5E63DB904FC6E31161AE2C395B3E93E5471A82D + publicKey: EFE6190D475E9D0DCFD549D46C68DE4B2CF5933CC8C8E8BB9B35E4FCDD157ADA + address: VAGNLVU5JFQQTXEGIS25MULMGR4LVBDYFKI3I2I + node-4: + Main: + privateKey: 13EC3218510CC09EF10625DD68CFD016125AA983E16116DF23131476D6D282F1 + publicKey: E6DC8EC8A444A99DC8D27E68231374658DB3F971FA059A508335418E2C39C99D + address: VBQ2BSYALIWD5XZVDH5VRLS3UAIUH3U6WSICZ7I + VRF: + privateKey: 38A0D9BD7930EFE2171B02530EF3843B07A65BDA2705949C3814362044D0FA3E + publicKey: D84CD3DCBBC64ED1BBD49485943C0A938EEB8F96D58581AED7ECB379F483D3E5 + address: VC7HHBTRLXLRMMEJHM2DXRQ5MRXSKQWWKEPNDFQ + Remote: + privateKey: 45EB6CB7D30321AA4039D98B621B0D7A51FD543EEBB14CFED437F596BCF6CDBF + publicKey: 1BFD142438FC588A873822E0A3FB62C46D0203E4DE13CD2A804E6404560F7B5F + address: VCGCWVG5JI7YTWTKV6Q75MO3BQ7ECD4GKUV2VBI + Transport: + privateKey: 755F33CF5437F215341BF0E1A9B277726FDED29B28C72AB463041FA9EC504D50 + publicKey: 018A7C7E4C8B3074B8ABC488F8E62F3C37ADD1547FF6056325422194920ACDB6 + address: VCVLZML6DEMRHZYJ7TU6ZK6DREADYO73AP2OJZA + node-5: + Main: + privateKey: 68F19EA3BA41348A79C02450042242C9B4BDFA11F108BE443618FA489081F796 + publicKey: D7E8B4741515F3B2F85B7E00B53DE54D6B8943E9213AFDA0BD8FFE7A6147A634 + address: VCIDT7ROOCA5FWSIVWGUVU2TK3TIZZ2A2ID2ULA + VRF: + privateKey: 0A306D90583FAFABC37C2418C77E4F882E5061AE2B7645A8221D856EAAEBD6E7 + publicKey: 24E3542CF42E7D962D8E3429C274CF37C2C97FEEA4D1A0AB63CF14B3898AB417 + address: VCRNUQKH56XVGWB45E6VR5WBDXJXAPVYYY5Z7SA + Remote: + privateKey: 888AFB9DBAAD737F378BD39E7429CB773AABE37DB8F2BFE43BD3CDF8B060038C + publicKey: ECCDB795BCD6CA52FD04B73F77C4D51D665510206353BF33B2D25F7CBEE32857 + address: VC22XOU722OTNWPIYULAAJVCJNV24Z3OZKJWXKY + Transport: + privateKey: D0958B117BCE287CE17B664061DA06E2FE96238171A05BEEE8AC6BE907434D59 + publicKey: D01696CA12C33078EF61C5B731B1F2598CC0737E98D6595496224E6C38A53353 + address: VBKJCBRNVKUT6TDE7J4G7ZFEVQRUQRMRAA42TRY + node-6: + Main: + privateKey: B00A4CC7BE684AE442EF787E4C77F7728C205701AE8EAB1C5B455B60F296BD07 + publicKey: B64B61FBF67681BC2125E4B68E76D798F0C9F37911BD09988C2CE009DB94D3D7 + address: VDJV4FH7KAQHIDYPSWTTWNYTABDT5YHHFQQK7KY + VRF: + privateKey: D67B51A3A64AC9D30D82E3DA54362E3BBE65B505136AAD866675D33715DF7AE9 + publicKey: 7C3A44D5A7B69286074DC6DAA8C816C428958DFC3C59B82076708914D135127F + address: VAPLJBYMTWW5WWDV3BLTO5SP3XBVI53MK42M4MA + Remote: + privateKey: DF62231FA90116D063B2FF82E0CE01DCF9C0FDE701805644C3F22E9888833AB4 + publicKey: AE2C92E0E81724682B9201D99DF9AF2CFAB18358DF52689AF3FA18246CA55E09 + address: VDQ6BP6UPJB6IKUXNTGPFAZ3HEATLHWLYZMIWEQ + Transport: + privateKey: 320C9A49BD461265C989EA2840761497C5C44E884C509CD78F0947C1A181B0F9 + publicKey: 1AF238092B70CE58B81EDFA0B4B9DB1AD75EB6A7C6477F17F91F9CC605F89FB2 + address: VDBYAWBPCEEUUK3VXM5DWSM4VSRCG2IV6FJXYKQ + node-7: + Main: + privateKey: 63D83B07D9102FC0A119F8F633850F816C119D69CAB8B1542FE74ABBB171E05F + publicKey: 8B97539C855D3BC88CE01E1C2BD44B22B158FA9EACA5781211198C87FA7FEBE5 + address: VALUZ4YHVCFH4HXIARHE3KHHEK2JLL5ZR4WDV6A + VRF: + privateKey: A1D9B80718039D63BABFC991A8A897BBCF2A9D1287AAC009E90571B6D60E99AE + publicKey: 4181255AA43B9C1473C86B0A615411A772CFF196247EB7EE63BD76E4B77863D2 + address: VDFP4GVHVWTJZWAU5ZJNE5CA6OGEZPUOXWNKGEQ + Remote: + privateKey: 12F98CE8C1141B7CE869002D9EB0955E07356FB8E88D1263E9F894B77DA5BD35 + publicKey: 0DB54444CFD20FD4D32F5A74DF1A9D9494CAE1501F1E19C859A226D2881B8ADB + address: VDD4AMXRDN7CSE3BQNYYOMJAF2Z4K22SUO5BIZQ + Transport: + privateKey: F2353E3EB3B883F5791605AE7AA59B75EB390B1728D56F00FFCF6606DB81B71E + publicKey: 87FD7F7F3C1E3A24DD5156FC7E097FA67B601F25F6609817E45A50567B91C750 + address: VBAPBRRUVN7GG27OZ7VEUCGEMH5QBVMDGOL4PEA + node-8: + Main: + privateKey: B9A9AD13982BF57A52225B28DB0C2B52150815351C7372ED98687AA31F5743BD + publicKey: A60F38264F04805FDA61D9AB7E851E581FFB2C256CFE36A94C1A677BD36A00B4 + address: VA6W6LL4UMA7G6T67QWOVUXZDMQLHYAEF4ABIHQ + VRF: + privateKey: 5C1EBE39EEC93079CE69911590AE09BD8D888D31A0CB513BF2B04B336136FDA5 + publicKey: D7846D51BEA2CBEDF936BE1943A8E63AFA944327BBEF5A727466D7DBCF01D1FB + address: VBOMYM6HLK3ULO5QYHQS4CVJVMLFOQBY3IARGYQ + Remote: + privateKey: 4507458976A8740BD131E5AC146731DB367B82C939122EA53A7FD17AD6915CA4 + publicKey: CDA4014AA2D6C12E096B80B2DFB03B41481A97FC621D601D9CB1C86544DB81FF + address: VBKL4ZSRYKM4BC52BXIMOWHTHIHPJGKNGJTGKHY + Transport: + privateKey: 565D0CD0D25F1862EF88BE8B57B9CC17DA5D22F848EAEADAC82F775BC3B069EC + publicKey: B9DECCFC982280B00D1DC78F8FFB5FC6920A60D67D50D094D06E8C428E1C298C + address: VDLTCV5URVEHHYO7SL6V3XCPCUHUOROJIMPVEPA +network: + nemesisSigner: + privateKey: E8196490960EA4E7174E5FFA14AAC0C7936AD585E2E43C8E74F557648E54D524 + publicKey: E3C35191472508C4C50EE5ACE383C5D03E3A5B15D721ADEE1E03840DA95A01B4 + address: VBZR5ASINTLZM3WJZHGRCEFL4CWVH7YLWPOPIGY + founder: + privateKey: AC2D9DFC645EB0903DA712C1527FABE50872A30313DBEBC2147268C533C97BC9 + publicKey: B5037858670D0C21439BC124F11BC51347FB9698BEF2FFCA209D00E6634C77D7 + address: VAFMYGTC7GHATNZ2FVYG5FQHC6KX22IDHDGXIXQ + faucet: + privateKey: 27E6C7491BEAF94185F2A12CAA339AC6BF86BDCFA846C34F19636D652218E9A9 + publicKey: 9D353EC7D2BAD909DE5FF3E3F98E6BF4D70C3B26F5D981B5E38BA05CCCADD393 + address: VBALND6RJJK2M6TW4CSKTLV6ZRFCK7FLESQTFCA + harvestNetworkFeeSink: + privateKey: E58666EC1A811C61E1D690C4C39FB877142D82F9517626E29A81998BFF291C2A + publicKey: 1870C582529EC42F420F6C4F2F1F7DC1CF7F0D7AAE9AF27062BFBA44FE4A8DDF + address: VDQPJMHDSOLJJK2FQ74Y4A3QW53H4VL2IDANWHA + namespaceRentalFeeSink: + privateKey: B70E7EEA47FA564218A781007C6403A77062AA72B40DD695E8C0051F6E3A83F6 + publicKey: 9939AE3F620CDE2A1F819C25C200F43065D47858709A31AFDA69613129D54D0D + address: VD2CN6AP3ESMBYSPI745LXPIKDAXZVSS2BE6ZKY + mosaicRentalFeeSink: + privateKey: FAA3696464CA77FB5707BDB8CB8C2662BE657CA2A865F43968BD610B74A339D6 + publicKey: 0A3B4748B00BDCFF59C0D20B02767493D1677A1B9BBCCA59654CF22CF0D46BD5 + address: VCPXHM2CDC6XRIOEE5Y3UE6Q25FNHSDAV6XKQMI + rewardProgramEnrollment: + privateKey: E5356368061AFAE3FCDC358B9E0796DE37719079190177063FC8DC86BAB78D61 + publicKey: 3C20A014C9DF820DD46C5F525992393A4E35AAD42D2F6C97ADAA4D41BF9397F9 + address: VDDBKWC2VVINIVYKTD5LEKOPMAHTPWNNI3OUYMY +votingFiles: + node-4-1-720: + publicKey: 60B69CD5476C6C257535E5E8AC25FB66E65217C9F846FB96E246ABD1B9439F6E + fileContent: >- + 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 + node-5-1-720: + publicKey: 931E587571B9AEBAE37BF5DC23ADC6A153A581B351ECB00C63B67CC4F7E3F730 + fileContent: >- + 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 + node-6-1-720: + publicKey: 4316A49C4D3D8F94C15195EA7BC8539876A2C2533150BAFCF640BA1EA76A9F53 + fileContent: >- + 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 diff --git a/packages/network-core/test/networkExamples/network1-expected/network.yml b/packages/network-core/test/networkExamples/network1-expected/network.yml new file mode 100644 index 000000000..2aee20c1f --- /dev/null +++ b/packages/network-core/test/networkExamples/network1-expected/network.yml @@ -0,0 +1,153 @@ +preset: custom-network-preset.yml +domain: mycompany.com +suffix: myc +networkDescription: My Company Private Test Network +networkType: 168 +nemesisGenerationHashSeed: 3EC4F5010EAD8F4439241F242611C292CE569587D571A80AD2E73511BE820387 +epochAdjustment: 1626086470 +rewardProgramControllerApiUrl: 'http://myc-node-monitoring.mycompany.com:7890' +isNewNetwork: true +faucetBalances: + - 449949995 + - 750 +deploymentData: + type: AWS +nodes: + - + number: 1 + friendlyName: myc-demo--101 + assembly: demo + hostname: myc-demo--101.mycompany.com + customPreset: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: myc-demo--101 + host: myc-demo--101.mycompany.com + voting: false + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + nickName: demo + nodeType: HarvestingDemo + balances: + - 1000000 + - 150 + nodeSize: t3.xlarge + region: eu-east-1 + rootBlockSize: 750 + - + number: 2 + friendlyName: myc-dual-301 + assembly: dual + hostname: myc-dual-301.mycompany.com + customPreset: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: myc-dual-301 + host: myc-dual-301.mycompany.com + voting: false + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + nickName: dual + nodeType: HarvestingDual + balances: + - 3000000 + - 150 + nodeSize: t3.xlarge + region: eu-west-1 + rootBlockSize: 500 + - + number: 3 + friendlyName: myc-dual-302 + assembly: dual + hostname: myc-dual-302.mycompany.com + customPreset: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: myc-dual-302 + host: myc-dual-302.mycompany.com + voting: false + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + nickName: dual + nodeType: HarvestingDual + balances: + - 3000000 + - 150 + nodeSize: t3.xlarge + region: eu-west-1 + rootBlockSize: 500 + - + number: 4 + friendlyName: myc-peer-101 + assembly: peer + hostname: myc-peer-101.mycompany.com + customPreset: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: myc-peer-101 + host: myc-peer-101.mycompany.com + voting: true + harvesting: false + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + nickName: peer + nodeType: VotingNonHarvestingPeer + balances: + - 51000000 + - 0 + nodeSize: t3.large + region: us-west-1 + rootBlockSize: 250 + - + number: 5 + friendlyName: myc-peer-102 + assembly: peer + hostname: myc-peer-102.mycompany.com + customPreset: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: myc-peer-102 + host: myc-peer-102.mycompany.com + voting: true + harvesting: false + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + nickName: peer + nodeType: VotingNonHarvestingPeer + balances: + - 51000000 + - 0 + nodeSize: t3.large + region: us-west-1 + rootBlockSize: 250 + - + number: 6 + friendlyName: myc-beacon-001 + assembly: peer + hostname: myc-beacon-001.mycompany.com + customPreset: + privateKeySecurityMode: PROMPT_MAIN_TRANSPORT + nodes: + - + friendlyName: myc-beacon-001 + host: myc-beacon-001.mycompany.com + voting: true + harvesting: true + dockerComposeDebugMode: false + brokerDockerComposeDebugMode: false + nickName: beacon + nodeType: VotingPeer + balances: + - 3000000 + - 150 + nodeSize: t3.xlarge + region: us-east-1 + rootBlockSize: 250 diff --git a/packages/network-core/test/networkExamples/network1/custom-network-preset.yml b/packages/network-core/test/networkExamples/network1/custom-network-preset.yml new file mode 100644 index 000000000..0bc286fe1 --- /dev/null +++ b/packages/network-core/test/networkExamples/network1/custom-network-preset.yml @@ -0,0 +1,545 @@ +assemblies: 'api, dual, peer' +networkDescription: My Company Private Test Network +baseNamespace: symbol +batchVerificationRandomSource: /dev/urandom +harvestBeneficiaryPercentage: 25 +epochAdjustment: 1626086470s +enableRevoteOnBoot: false +maxHarvesterBalance: 50000000000000 +maxMosaicAtomicUnits: 8999999999000000 +minHarvesterBalance: 10000000000 +minVoterBalance: 3000000000000 +nemesisGenerationHashSeed: 3EC4F5010EAD8F4439241F242611C292CE569587D571A80AD2E73511BE820387 +harvestNetworkFeeSinkAddress: VDQPJMHDSOLJJK2FQ74Y4A3QW53H4VL2IDANWHA +namespaceRentalFeeSinkAddress: VD2CN6AP3ESMBYSPI745LXPIKDAXZVSS2BE6ZKY +mosaicRentalFeeSinkAddress: VCPXHM2CDC6XRIOEE5Y3UE6Q25FNHSDAV6XKQMI +nemesisSignerPublicKey: E3C35191472508C4C50EE5ACE383C5D03E3A5B15D721ADEE1E03840DA95A01B4 +networkType: 168 +rewardProgramCaFile: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +rewardProgramEnrollmentAddress: VDDBKWC2VVINIVYKTD5LEKOPMAHTPWNNI3OUYMY +rewardProgramControllerApiUrl: 'http://myc-node-monitoring.mycompany.com:7890' +totalChainImportance: 7842928625000000 +initialCurrencyAtomicUnits: 7842928625000000 +importanceGrouping: 180 +votingSetGrouping: 720 +votingKeyDesiredLifetime: 720 +votingKeyDesiredFutureLifetime: 120 +lastKnownNetworkEpoch: 1 +minVotingKeyLifetime: 28 +maxVotingKeyLifetime: 720 +stepDuration: 4m +maxBlockFutureTime: 300ms +maxAccountRestrictionValues: 100 +maxSecretLockDuration: 365d +maxNamespaceDuration: 1825d +minNamespaceDuration: 30d +namespaceGracePeriodDuration: 1d +blockGenerationTargetTime: 30s +defaultDynamicFeeMultiplier: 100 +rootNamespaceRentalFeePerBlock: 2 +childNamespaceRentalFee: 100000 +mosaicRentalFee: 500000 +throttlingBurst: 80 +throttlingRate: 60 +fileDatabaseBatchSize: 100 +minProofSize: 0 +syncTimeout: 5m +maxChildNamespaces: 100 +nonVotingUnfinalizedBlocksDuration: 10m +votingUnfinalizedBlocksDuration: 0m +timeSynchronizationMinImportance: 10000000000 +faucetUrl: 'http://faucet.testnet.symboldev.network' +restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' +nemesis: + referenceOnly: true + mosaics: + - + name: xym + divisibility: 6 + duration: 0 + supply: 7842928625000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: + - B5037858670D0C21439BC124F11BC51347FB9698BEF2FFCA209D00E6634C77D7 +inflation: + starting-at-height-2: 0 + starting-at-height-5760: 191997042 + starting-at-height-172799: 183764522 + starting-at-height-435299: 175884998 + starting-at-height-697799: 168343336 + starting-at-height-960299: 161125048 + starting-at-height-1222799: 154216270 + starting-at-height-1485299: 147603728 + starting-at-height-1747799: 141274720 + starting-at-height-2010299: 135217090 + starting-at-height-2272799: 129419202 + starting-at-height-2535299: 123869918 + starting-at-height-2797799: 118558578 + starting-at-height-3060299: 113474978 + starting-at-height-3322799: 108609356 + starting-at-height-3585299: 103952364 + starting-at-height-3847799: 99495056 + starting-at-height-4110299: 95228870 + starting-at-height-4372799: 91145612 + starting-at-height-4635299: 87237436 + starting-at-height-4897799: 83496838 + starting-at-height-5160299: 79916630 + starting-at-height-5422799: 76489934 + starting-at-height-5685299: 73210170 + starting-at-height-5947799: 70071038 + starting-at-height-6210299: 67066506 + starting-at-height-6472799: 64190804 + starting-at-height-6735299: 61438406 + starting-at-height-6997799: 58804028 + starting-at-height-7260299: 56282608 + starting-at-height-7522799: 53869300 + starting-at-height-7785299: 51559472 + starting-at-height-8047799: 49348686 + starting-at-height-8310299: 47232696 + starting-at-height-8572799: 45207434 + starting-at-height-8835299: 43269014 + starting-at-height-9097799: 41413708 + starting-at-height-9360299: 39637956 + starting-at-height-9622799: 37938346 + starting-at-height-9885299: 36311610 + starting-at-height-10147799: 34754628 + starting-at-height-10410299: 33264406 + starting-at-height-10672799: 31838082 + starting-at-height-10935299: 30472918 + starting-at-height-11197799: 29166288 + starting-at-height-11460299: 27915686 + starting-at-height-11722799: 26718706 + starting-at-height-11985299: 25573052 + starting-at-height-12247799: 24476520 + starting-at-height-12510299: 23427008 + starting-at-height-12772799: 22422496 + starting-at-height-13035299: 21461056 + starting-at-height-13297799: 20540840 + starting-at-height-13560299: 19660082 + starting-at-height-13822799: 18817090 + starting-at-height-14085299: 18010244 + starting-at-height-14347799: 17237994 + starting-at-height-14610299: 16498858 + starting-at-height-14872799: 15791412 + starting-at-height-15135299: 15114302 + starting-at-height-15397799: 14466226 + starting-at-height-15660299: 13845938 + starting-at-height-15922799: 13252246 + starting-at-height-16185299: 12684012 + starting-at-height-16447799: 12140142 + starting-at-height-16710299: 11619592 + starting-at-height-16972799: 11121364 + starting-at-height-17235299: 10644498 + starting-at-height-17497799: 10188078 + starting-at-height-17760299: 9751230 + starting-at-height-18022799: 9333114 + starting-at-height-18285299: 8932924 + starting-at-height-18547799: 8549896 + starting-at-height-18810299: 8183290 + starting-at-height-19072799: 7832404 + starting-at-height-19335299: 7496562 + starting-at-height-19597799: 7175122 + starting-at-height-19860299: 6867464 + starting-at-height-20122799: 6573000 + starting-at-height-20385299: 6291160 + starting-at-height-20647799: 6021404 + starting-at-height-20910299: 5763216 + starting-at-height-21172799: 5516100 + starting-at-height-21435299: 5279578 + starting-at-height-21697799: 5053198 + starting-at-height-21960299: 4836526 + starting-at-height-22222799: 4629144 + starting-at-height-22485299: 4430652 + starting-at-height-22747799: 4240674 + starting-at-height-23010299: 4058840 + starting-at-height-23272799: 3884804 + starting-at-height-23535299: 3718230 + starting-at-height-23797799: 3558798 + starting-at-height-24060299: 3406202 + starting-at-height-24322799: 3260150 + starting-at-height-24585299: 3120360 + starting-at-height-24847799: 2986564 + starting-at-height-25110299: 2858506 + starting-at-height-25372799: 2735938 + starting-at-height-25635299: 2618624 + starting-at-height-25897799: 2506342 + starting-at-height-26160299: 2398874 + starting-at-height-26422799: 2296014 + starting-at-height-26685299: 2197564 + starting-at-height-26947799: 2103336 + starting-at-height-27210299: 2013150 + starting-at-height-27472799: 1926828 + starting-at-height-27735299: 1844210 + starting-at-height-27997799: 1765132 + starting-at-height-28260299: 1689446 + starting-at-height-28522799: 1617006 + starting-at-height-28785299: 1547672 + starting-at-height-29047799: 1481310 + starting-at-height-29310299: 1417794 + starting-at-height-29572799: 1357000 + starting-at-height-29835299: 1298814 + starting-at-height-30097799: 1243124 + starting-at-height-30360299: 1189820 + starting-at-height-30622799: 1138802 + starting-at-height-30885299: 1089972 + starting-at-height-31147799: 1043236 + starting-at-height-31410299: 998504 + starting-at-height-31672799: 955690 + starting-at-height-31935299: 914712 + starting-at-height-32197799: 875490 + starting-at-height-32460299: 837950 + starting-at-height-32722799: 802020 + starting-at-height-32985299: 767630 + starting-at-height-33247799: 734716 + starting-at-height-33510299: 703212 + starting-at-height-33772799: 673060 + starting-at-height-34035299: 644200 + starting-at-height-34297799: 616578 + starting-at-height-34560299: 590140 + starting-at-height-34822799: 564836 + starting-at-height-35085299: 540616 + starting-at-height-35347799: 517436 + starting-at-height-35610299: 495248 + starting-at-height-35872799: 474014 + starting-at-height-36135299: 453688 + starting-at-height-36397799: 434234 + starting-at-height-36660299: 415616 + starting-at-height-36922799: 397794 + starting-at-height-37185299: 380738 + starting-at-height-37447799: 364412 + starting-at-height-37710299: 348786 + starting-at-height-37972799: 333832 + starting-at-height-38235299: 319518 + starting-at-height-38497799: 305816 + starting-at-height-38760299: 292704 + starting-at-height-39022799: 280154 + starting-at-height-39285299: 268140 + starting-at-height-39547799: 256644 + starting-at-height-39810299: 245638 + starting-at-height-40072799: 235106 + starting-at-height-40335299: 225026 + starting-at-height-40597799: 215376 + starting-at-height-40860299: 206142 + starting-at-height-41122799: 197302 + starting-at-height-41385299: 188842 + starting-at-height-41647799: 180744 + starting-at-height-41910299: 172994 + starting-at-height-42172799: 165578 + starting-at-height-42435299: 158478 + starting-at-height-42697799: 151682 + starting-at-height-42960299: 145178 + starting-at-height-43222799: 138954 + starting-at-height-43485299: 132994 + starting-at-height-43747799: 127292 + starting-at-height-44010299: 121834 + starting-at-height-44272799: 116610 + starting-at-height-44535299: 111610 + starting-at-height-44797799: 106824 + starting-at-height-45060299: 102244 + starting-at-height-45322799: 97860 + starting-at-height-45585299: 93664 + starting-at-height-45847799: 89648 + starting-at-height-46110299: 85804 + starting-at-height-46372799: 82124 + starting-at-height-46635299: 78602 + starting-at-height-46897799: 75232 + starting-at-height-47160299: 72006 + starting-at-height-47422799: 68920 + starting-at-height-47685299: 65964 + starting-at-height-47947799: 63136 + starting-at-height-48210299: 60428 + starting-at-height-48472799: 57838 + starting-at-height-48735299: 55358 + starting-at-height-48997799: 52984 + starting-at-height-49260299: 50712 + starting-at-height-49522799: 48538 + starting-at-height-49785299: 46456 + starting-at-height-50047799: 44464 + starting-at-height-50310299: 42558 + starting-at-height-50572799: 40732 + starting-at-height-50835299: 38986 + starting-at-height-51097799: 37314 + starting-at-height-51360299: 35714 + starting-at-height-51622799: 34182 + starting-at-height-51885299: 32716 + starting-at-height-52147799: 31314 + starting-at-height-52410299: 29972 + starting-at-height-52672799: 28686 + starting-at-height-52935299: 27456 + starting-at-height-53197799: 26278 + starting-at-height-53460299: 25152 + starting-at-height-53722799: 24074 + starting-at-height-53985299: 23042 + starting-at-height-54247799: 22054 + starting-at-height-54510299: 21108 + starting-at-height-54772799: 20202 + starting-at-height-55035299: 19336 + starting-at-height-55297799: 18506 + starting-at-height-55560299: 17714 + starting-at-height-55822799: 16954 + starting-at-height-56085299: 16226 + starting-at-height-56347799: 15532 + starting-at-height-56610299: 14866 + starting-at-height-56872799: 14228 + starting-at-height-57135299: 13618 + starting-at-height-57397799: 13034 + starting-at-height-57660299: 12474 + starting-at-height-57922799: 11940 + starting-at-height-58185299: 11428 + starting-at-height-58447799: 10938 + starting-at-height-58710299: 10468 + starting-at-height-58972799: 10020 + starting-at-height-59235299: 9590 + starting-at-height-59497799: 9178 + starting-at-height-59760299: 8786 + starting-at-height-60022799: 8408 + starting-at-height-60285299: 8048 + starting-at-height-60547799: 7702 + starting-at-height-60810299: 7372 + starting-at-height-61072799: 7056 + starting-at-height-61335299: 6754 + starting-at-height-61597799: 6464 + starting-at-height-61860299: 6186 + starting-at-height-62122799: 5922 + starting-at-height-62385299: 5668 + starting-at-height-62647799: 5424 + starting-at-height-62910299: 5192 + starting-at-height-63172799: 4970 + starting-at-height-63435299: 4756 + starting-at-height-63697799: 4552 + starting-at-height-63960299: 4356 + starting-at-height-64222799: 4170 + starting-at-height-64485299: 3992 + starting-at-height-64747799: 3820 + starting-at-height-65010299: 3656 + starting-at-height-65272799: 3500 + starting-at-height-65535299: 3350 + starting-at-height-65797799: 3206 + starting-at-height-66060299: 3068 + starting-at-height-66322799: 2936 + starting-at-height-66585299: 2810 + starting-at-height-66847799: 2690 + starting-at-height-67110299: 2574 + starting-at-height-67372799: 2464 + starting-at-height-67635299: 2358 + starting-at-height-67897799: 2258 + starting-at-height-68160299: 2160 + starting-at-height-68422799: 2068 + starting-at-height-68685299: 1980 + starting-at-height-68947799: 1894 + starting-at-height-69210299: 1812 + starting-at-height-69472799: 1736 + starting-at-height-69735299: 1660 + starting-at-height-69997799: 1590 + starting-at-height-70260299: 1522 + starting-at-height-70522799: 1456 + starting-at-height-70785299: 1394 + starting-at-height-71047799: 1334 + starting-at-height-71310299: 1276 + starting-at-height-71572799: 1222 + starting-at-height-71835299: 1170 + starting-at-height-72097799: 1120 + starting-at-height-72360299: 1072 + starting-at-height-72622799: 1026 + starting-at-height-72885299: 982 + starting-at-height-73147799: 938 + starting-at-height-73410299: 898 + starting-at-height-73672799: 860 + starting-at-height-73935299: 824 + starting-at-height-74197799: 788 + starting-at-height-74460299: 754 + starting-at-height-74722799: 722 + starting-at-height-74985299: 690 + starting-at-height-75247799: 662 + starting-at-height-75510299: 632 + starting-at-height-75772799: 606 + starting-at-height-76035299: 580 + starting-at-height-76297799: 554 + starting-at-height-76560299: 530 + starting-at-height-76822799: 508 + starting-at-height-77085299: 486 + starting-at-height-77347799: 466 + starting-at-height-77610299: 446 + starting-at-height-77872799: 426 + starting-at-height-78135299: 408 + starting-at-height-78397799: 390 + starting-at-height-78660299: 374 + starting-at-height-78922799: 358 + starting-at-height-79185299: 342 + starting-at-height-79447799: 328 + starting-at-height-79710299: 314 + starting-at-height-79972799: 300 + starting-at-height-80235299: 286 + starting-at-height-80497799: 274 + starting-at-height-80760299: 262 + starting-at-height-81022799: 252 + starting-at-height-81285299: 240 + starting-at-height-81547799: 230 + starting-at-height-81810299: 220 + starting-at-height-82072799: 210 + starting-at-height-82335299: 202 + starting-at-height-82597799: 194 + starting-at-height-82860299: 184 + starting-at-height-83122799: 176 + starting-at-height-83385299: 170 + starting-at-height-83647799: 162 + starting-at-height-83910299: 154 + starting-at-height-84172799: 148 + starting-at-height-84435299: 142 + starting-at-height-84697799: 136 + starting-at-height-84960299: 130 + starting-at-height-85222799: 124 + starting-at-height-85485299: 118 + starting-at-height-85747799: 114 + starting-at-height-86010299: 108 + starting-at-height-86272799: 104 + starting-at-height-86535299: 100 + starting-at-height-86797799: 96 + starting-at-height-87060299: 92 + starting-at-height-87322799: 88 + starting-at-height-87585299: 84 + starting-at-height-87847799: 80 + starting-at-height-88110299: 76 + starting-at-height-88372799: 72 + starting-at-height-88635299: 70 + starting-at-height-88897799: 66 + starting-at-height-89160299: 64 + starting-at-height-89422799: 62 + starting-at-height-89685299: 58 + starting-at-height-89947799: 56 + starting-at-height-90210299: 54 + starting-at-height-90472799: 52 + starting-at-height-90735299: 48 + starting-at-height-90997799: 46 + starting-at-height-91260299: 44 + starting-at-height-91522799: 42 + starting-at-height-91785299: 40 + starting-at-height-92047799: 40 + starting-at-height-92310299: 38 + starting-at-height-92572799: 36 + starting-at-height-92835299: 34 + starting-at-height-93097799: 32 + starting-at-height-93360299: 32 + starting-at-height-93622799: 30 + starting-at-height-93885299: 28 + starting-at-height-94147799: 28 + starting-at-height-94410299: 26 + starting-at-height-94672799: 24 + starting-at-height-94935299: 24 + starting-at-height-95197799: 22 + starting-at-height-95460299: 22 + starting-at-height-95722799: 20 + starting-at-height-95985299: 20 + starting-at-height-96247799: 18 + starting-at-height-96510299: 18 + starting-at-height-96772799: 18 + starting-at-height-97035299: 16 + starting-at-height-97297799: 16 + starting-at-height-97560299: 14 + starting-at-height-97822799: 14 + starting-at-height-98085299: 14 + starting-at-height-98347799: 12 + starting-at-height-98610299: 12 + starting-at-height-98872799: 12 + starting-at-height-99135299: 12 + starting-at-height-99397799: 10 + starting-at-height-99660299: 10 + starting-at-height-99922799: 10 + starting-at-height-100185299: 10 + starting-at-height-100447799: 8 + starting-at-height-100710299: 8 + starting-at-height-100972799: 8 + starting-at-height-101235299: 8 + starting-at-height-101497799: 8 + starting-at-height-101760299: 6 + starting-at-height-102022799: 6 + starting-at-height-102285299: 6 + starting-at-height-102547799: 6 + starting-at-height-102810299: 6 + starting-at-height-103072799: 6 + starting-at-height-103335299: 6 + starting-at-height-103597799: 4 + starting-at-height-103860299: 4 + starting-at-height-104122799: 4 + starting-at-height-104385299: 4 + starting-at-height-104647799: 4 + starting-at-height-104910299: 4 + starting-at-height-105172799: 4 + starting-at-height-105435299: 4 + starting-at-height-105697799: 4 + starting-at-height-105960299: 2 + starting-at-height-106222799: 2 + starting-at-height-106485299: 2 + starting-at-height-106747799: 2 + starting-at-height-107010299: 2 + starting-at-height-107272799: 2 + starting-at-height-107535299: 2 + starting-at-height-107797799: 2 + starting-at-height-108060299: 2 + starting-at-height-108322799: 2 + starting-at-height-108585299: 2 + starting-at-height-108847799: 2 + starting-at-height-109110299: 2 + starting-at-height-109372799: 2 + starting-at-height-109635299: 2 + starting-at-height-109897799: 2 + starting-at-height-110160299: 1 + starting-at-height-110422799: 0 +knownRestGateways: + - 'http://myc-demo--101.mycompany.com:3000' + - 'http://myc-dual-301.mycompany.com:3000' + - 'http://myc-dual-302.mycompany.com:3000' +knownPeers: + api-node: + - + publicKey: ACD05DF9457F27F813D648E117B2C3256057715646D9E0EBDEC9C87A89B4A24D + endpoint: + host: myc-demo--101.mycompany.com + port: 7900 + metadata: + name: myc-demo--101 + roles: 'Api,Peer' + - + publicKey: 3F4363A16CB8A6BED1F5DB4093BBE63E4DD795C19C2DA3081AC228BDF4A18AEF + endpoint: + host: myc-dual-301.mycompany.com + port: 7900 + metadata: + name: myc-dual-301 + roles: 'Api,Peer' + - + publicKey: D336B6C12FBA12FB3C69EFE11A3E041E91F5FBC63D4D3B14C2AC6EADCA403F5E + endpoint: + host: myc-dual-302.mycompany.com + port: 7900 + metadata: + name: myc-dual-302 + roles: 'Api,Peer' + peer-node: + - + publicKey: E6DC8EC8A444A99DC8D27E68231374658DB3F971FA059A508335418E2C39C99D + endpoint: + host: myc-peer-101.mycompany.com + port: 7900 + metadata: + name: myc-peer-101 + roles: 'Peer,Voting' + - + publicKey: D7E8B4741515F3B2F85B7E00B53DE54D6B8943E9213AFDA0BD8FFE7A6147A634 + endpoint: + host: myc-peer-102.mycompany.com + port: 7900 + metadata: + name: myc-peer-102 + roles: 'Peer,Voting' + - + publicKey: B64B61FBF67681BC2125E4B68E76D798F0C9F37911BD09988C2CE009DB94D3D7 + endpoint: + host: myc-beacon-001.mycompany.com + port: 7900 + metadata: + name: myc-beacon-001 + roles: 'Peer,Voting' diff --git a/packages/network-core/test/networkExamples/network1/key-store.yml b/packages/network-core/test/networkExamples/network1/key-store.yml new file mode 100644 index 000000000..c7c89f108 --- /dev/null +++ b/packages/network-core/test/networkExamples/network1/key-store.yml @@ -0,0 +1,179 @@ +nodes: + node-1: + Main: + privateKey: FA950CD253FF4404EF91B0A36CC0A5D08A6ACA1B6C79F50854C27C672B82F69E + publicKey: ACD05DF9457F27F813D648E117B2C3256057715646D9E0EBDEC9C87A89B4A24D + address: VA2T35DRT57PG6NDBEAXRV3H424FUXNPPOYXYGQ + VRF: + privateKey: BFD116738C8A02E4C9619F1E4AD80DD2AD0E519D33071D9E83B7F5C834C74535 + publicKey: 30D87B47F4EA4B0F086D9826B49ED105D123A87D447289C88021364F4DFD5D5F + address: VATAVDCPTI3YJZUWJGVCQJPNHZ2VIW4IYTEXTOA + Remote: + privateKey: F6BD8B7A6A145D1D0A97407B1BA48FDA6F03A8E70BF3F430C5AB03A4E2D1E043 + publicKey: 139F6E6ABAFCD7AD8F6BDFF9FA7AE680302400471DF1FA9D93BD821F35F9B703 + address: VAJZJJFHFQDRNLVOMKS6PNVHZTT2FGB45DDO4NI + Transport: + privateKey: 088FC2D89AF9BDA05FC998E28AED80BD3A76D07A794765CC7EFEEA3F94A9E705 + publicKey: F4181A831545AD63BBE972172AA848CF67F6B7AA4BF17CA397D6F14869E653E1 + address: VAQ4CFLFZVXTHKGEXQHB2AK7EPZEXU7TBOHWKRQ + node-2: + Main: + privateKey: D61E51CC9143483DFE375F73AC6F5949B4A9442E040CEC715524C396C893085A + publicKey: 3F4363A16CB8A6BED1F5DB4093BBE63E4DD795C19C2DA3081AC228BDF4A18AEF + address: VDVLR4DP7UA5U4XBFPMWQSU2CKVY2M6H2AY5L3I + VRF: + privateKey: 8649E8D06B33C82ABABC418C62DAF4E683F2C8101762CABF8383675C7CEA5339 + publicKey: 1E67463D6E5F5D184F85453111D4E73C1D128595FFA50AD0BF00ADD1D300054F + address: VAHEQZF5MGIZ77KT2IAUQO7EQFR34HXSFQWI7OA + Remote: + privateKey: 5A5B9B25AFBD891E482F25FA37F81559E6902B1231E604FB6D3B8691C2EDF1B2 + publicKey: 09200207F254D556760F199FFE5B0E0DC510F4F35F3D8A55A745567214E3BF54 + address: VDJ5HCE556XR36ABZHGL7HY6BCWLS7YM2EDYH5A + Transport: + privateKey: CA1D5B37C8C5F6AB085DEF7D7F844F654EE79E7BCFFDC2175E984548C9082AD9 + publicKey: D9D4E3BDE3EB76F7A23088F2FDD843BAB400B68164AFB0AAEDB89B8805505518 + address: VB2AFSAVPBP5I3ZMT6ETKYJS7RIWQI62NXTCKUY + node-3: + Main: + privateKey: F985E23F7886B4F79C93A47AC1FC60B9B83FAC5B38F220B5D5D56F6A2C6D9F4E + publicKey: D336B6C12FBA12FB3C69EFE11A3E041E91F5FBC63D4D3B14C2AC6EADCA403F5E + address: VAJCM6K2UZCXLH6XDNPIBXRJFSMR4VBHAN5OCNI + VRF: + privateKey: 7F35B1F5DDE2495011F0894120D7F4C215B79173F4682D20996DF1A59166A2F7 + publicKey: E65F80B3986E2F6729D4A6CAD27CE79A777CE6A4442DB227BF5AB03BEAA581BE + address: VDXUID3LULDOD66NWTDAHXGULERHNJRMP5DCFFQ + Remote: + privateKey: 63308B57494ED26C2144A4291F0C21970D7FA01DFAD01955800C00C704F75B35 + publicKey: 1A53070EB5AE38FED9C83AE2260C1E2F2F0A6283FACE7C4AE5E5164110FE1D15 + address: VDEXAKC5QFW2GB24SHPOUFJQQEWXAJEDOTPJLDY + Transport: + privateKey: 191BDEEF7604B3EF3C2C1472F5E63DB904FC6E31161AE2C395B3E93E5471A82D + publicKey: EFE6190D475E9D0DCFD549D46C68DE4B2CF5933CC8C8E8BB9B35E4FCDD157ADA + address: VAGNLVU5JFQQTXEGIS25MULMGR4LVBDYFKI3I2I + node-4: + Main: + privateKey: 13EC3218510CC09EF10625DD68CFD016125AA983E16116DF23131476D6D282F1 + publicKey: E6DC8EC8A444A99DC8D27E68231374658DB3F971FA059A508335418E2C39C99D + address: VBQ2BSYALIWD5XZVDH5VRLS3UAIUH3U6WSICZ7I + VRF: + privateKey: 38A0D9BD7930EFE2171B02530EF3843B07A65BDA2705949C3814362044D0FA3E + publicKey: D84CD3DCBBC64ED1BBD49485943C0A938EEB8F96D58581AED7ECB379F483D3E5 + address: VC7HHBTRLXLRMMEJHM2DXRQ5MRXSKQWWKEPNDFQ + Remote: + privateKey: 45EB6CB7D30321AA4039D98B621B0D7A51FD543EEBB14CFED437F596BCF6CDBF + publicKey: 1BFD142438FC588A873822E0A3FB62C46D0203E4DE13CD2A804E6404560F7B5F + address: VCGCWVG5JI7YTWTKV6Q75MO3BQ7ECD4GKUV2VBI + Transport: + privateKey: 755F33CF5437F215341BF0E1A9B277726FDED29B28C72AB463041FA9EC504D50 + publicKey: 018A7C7E4C8B3074B8ABC488F8E62F3C37ADD1547FF6056325422194920ACDB6 + address: VCVLZML6DEMRHZYJ7TU6ZK6DREADYO73AP2OJZA + node-5: + Main: + privateKey: 68F19EA3BA41348A79C02450042242C9B4BDFA11F108BE443618FA489081F796 + publicKey: D7E8B4741515F3B2F85B7E00B53DE54D6B8943E9213AFDA0BD8FFE7A6147A634 + address: VCIDT7ROOCA5FWSIVWGUVU2TK3TIZZ2A2ID2ULA + VRF: + privateKey: 0A306D90583FAFABC37C2418C77E4F882E5061AE2B7645A8221D856EAAEBD6E7 + publicKey: 24E3542CF42E7D962D8E3429C274CF37C2C97FEEA4D1A0AB63CF14B3898AB417 + address: VCRNUQKH56XVGWB45E6VR5WBDXJXAPVYYY5Z7SA + Remote: + privateKey: 888AFB9DBAAD737F378BD39E7429CB773AABE37DB8F2BFE43BD3CDF8B060038C + publicKey: ECCDB795BCD6CA52FD04B73F77C4D51D665510206353BF33B2D25F7CBEE32857 + address: VC22XOU722OTNWPIYULAAJVCJNV24Z3OZKJWXKY + Transport: + privateKey: D0958B117BCE287CE17B664061DA06E2FE96238171A05BEEE8AC6BE907434D59 + publicKey: D01696CA12C33078EF61C5B731B1F2598CC0737E98D6595496224E6C38A53353 + address: VBKJCBRNVKUT6TDE7J4G7ZFEVQRUQRMRAA42TRY + node-6: + Main: + privateKey: B00A4CC7BE684AE442EF787E4C77F7728C205701AE8EAB1C5B455B60F296BD07 + publicKey: B64B61FBF67681BC2125E4B68E76D798F0C9F37911BD09988C2CE009DB94D3D7 + address: VDJV4FH7KAQHIDYPSWTTWNYTABDT5YHHFQQK7KY + VRF: + privateKey: D67B51A3A64AC9D30D82E3DA54362E3BBE65B505136AAD866675D33715DF7AE9 + publicKey: 7C3A44D5A7B69286074DC6DAA8C816C428958DFC3C59B82076708914D135127F + address: VAPLJBYMTWW5WWDV3BLTO5SP3XBVI53MK42M4MA + Remote: + privateKey: DF62231FA90116D063B2FF82E0CE01DCF9C0FDE701805644C3F22E9888833AB4 + publicKey: AE2C92E0E81724682B9201D99DF9AF2CFAB18358DF52689AF3FA18246CA55E09 + address: VDQ6BP6UPJB6IKUXNTGPFAZ3HEATLHWLYZMIWEQ + Transport: + privateKey: 320C9A49BD461265C989EA2840761497C5C44E884C509CD78F0947C1A181B0F9 + publicKey: 1AF238092B70CE58B81EDFA0B4B9DB1AD75EB6A7C6477F17F91F9CC605F89FB2 + address: VDBYAWBPCEEUUK3VXM5DWSM4VSRCG2IV6FJXYKQ + node-7: + Main: + privateKey: 63D83B07D9102FC0A119F8F633850F816C119D69CAB8B1542FE74ABBB171E05F + publicKey: 8B97539C855D3BC88CE01E1C2BD44B22B158FA9EACA5781211198C87FA7FEBE5 + address: VALUZ4YHVCFH4HXIARHE3KHHEK2JLL5ZR4WDV6A + VRF: + privateKey: A1D9B80718039D63BABFC991A8A897BBCF2A9D1287AAC009E90571B6D60E99AE + publicKey: 4181255AA43B9C1473C86B0A615411A772CFF196247EB7EE63BD76E4B77863D2 + address: VDFP4GVHVWTJZWAU5ZJNE5CA6OGEZPUOXWNKGEQ + Remote: + privateKey: 12F98CE8C1141B7CE869002D9EB0955E07356FB8E88D1263E9F894B77DA5BD35 + publicKey: 0DB54444CFD20FD4D32F5A74DF1A9D9494CAE1501F1E19C859A226D2881B8ADB + address: VDD4AMXRDN7CSE3BQNYYOMJAF2Z4K22SUO5BIZQ + Transport: + privateKey: F2353E3EB3B883F5791605AE7AA59B75EB390B1728D56F00FFCF6606DB81B71E + publicKey: 87FD7F7F3C1E3A24DD5156FC7E097FA67B601F25F6609817E45A50567B91C750 + address: VBAPBRRUVN7GG27OZ7VEUCGEMH5QBVMDGOL4PEA + node-8: + Main: + privateKey: B9A9AD13982BF57A52225B28DB0C2B52150815351C7372ED98687AA31F5743BD + publicKey: A60F38264F04805FDA61D9AB7E851E581FFB2C256CFE36A94C1A677BD36A00B4 + address: VA6W6LL4UMA7G6T67QWOVUXZDMQLHYAEF4ABIHQ + VRF: + privateKey: 5C1EBE39EEC93079CE69911590AE09BD8D888D31A0CB513BF2B04B336136FDA5 + publicKey: D7846D51BEA2CBEDF936BE1943A8E63AFA944327BBEF5A727466D7DBCF01D1FB + address: VBOMYM6HLK3ULO5QYHQS4CVJVMLFOQBY3IARGYQ + Remote: + privateKey: 4507458976A8740BD131E5AC146731DB367B82C939122EA53A7FD17AD6915CA4 + publicKey: CDA4014AA2D6C12E096B80B2DFB03B41481A97FC621D601D9CB1C86544DB81FF + address: VBKL4ZSRYKM4BC52BXIMOWHTHIHPJGKNGJTGKHY + Transport: + privateKey: 565D0CD0D25F1862EF88BE8B57B9CC17DA5D22F848EAEADAC82F775BC3B069EC + publicKey: B9DECCFC982280B00D1DC78F8FFB5FC6920A60D67D50D094D06E8C428E1C298C + address: VDLTCV5URVEHHYO7SL6V3XCPCUHUOROJIMPVEPA +network: + nemesisSigner: + privateKey: E8196490960EA4E7174E5FFA14AAC0C7936AD585E2E43C8E74F557648E54D524 + publicKey: E3C35191472508C4C50EE5ACE383C5D03E3A5B15D721ADEE1E03840DA95A01B4 + address: VBZR5ASINTLZM3WJZHGRCEFL4CWVH7YLWPOPIGY + founder: + privateKey: AC2D9DFC645EB0903DA712C1527FABE50872A30313DBEBC2147268C533C97BC9 + publicKey: B5037858670D0C21439BC124F11BC51347FB9698BEF2FFCA209D00E6634C77D7 + address: VAFMYGTC7GHATNZ2FVYG5FQHC6KX22IDHDGXIXQ + faucet: + privateKey: 27E6C7491BEAF94185F2A12CAA339AC6BF86BDCFA846C34F19636D652218E9A9 + publicKey: 9D353EC7D2BAD909DE5FF3E3F98E6BF4D70C3B26F5D981B5E38BA05CCCADD393 + address: VBALND6RJJK2M6TW4CSKTLV6ZRFCK7FLESQTFCA + harvestNetworkFeeSink: + privateKey: E58666EC1A811C61E1D690C4C39FB877142D82F9517626E29A81998BFF291C2A + publicKey: 1870C582529EC42F420F6C4F2F1F7DC1CF7F0D7AAE9AF27062BFBA44FE4A8DDF + address: VDQPJMHDSOLJJK2FQ74Y4A3QW53H4VL2IDANWHA + namespaceRentalFeeSink: + privateKey: B70E7EEA47FA564218A781007C6403A77062AA72B40DD695E8C0051F6E3A83F6 + publicKey: 9939AE3F620CDE2A1F819C25C200F43065D47858709A31AFDA69613129D54D0D + address: VD2CN6AP3ESMBYSPI745LXPIKDAXZVSS2BE6ZKY + mosaicRentalFeeSink: + privateKey: FAA3696464CA77FB5707BDB8CB8C2662BE657CA2A865F43968BD610B74A339D6 + publicKey: 0A3B4748B00BDCFF59C0D20B02767493D1677A1B9BBCCA59654CF22CF0D46BD5 + address: VCPXHM2CDC6XRIOEE5Y3UE6Q25FNHSDAV6XKQMI + rewardProgramEnrollment: + privateKey: E5356368061AFAE3FCDC358B9E0796DE37719079190177063FC8DC86BAB78D61 + publicKey: 3C20A014C9DF820DD46C5F525992393A4E35AAD42D2F6C97ADAA4D41BF9397F9 + address: VDDBKWC2VVINIVYKTD5LEKOPMAHTPWNNI3OUYMY +votingFiles: + node-4-1-720: + publicKey: 60B69CD5476C6C257535E5E8AC25FB66E65217C9F846FB96E246ABD1B9439F6E + fileContent: >- + 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 + node-5-1-720: + publicKey: 931E587571B9AEBAE37BF5DC23ADC6A153A581B351ECB00C63B67CC4F7E3F730 + fileContent: >- + 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 + node-6-1-720: + publicKey: 4316A49C4D3D8F94C15195EA7BC8539876A2C2533150BAFCF640BA1EA76A9F53 + fileContent: >- + 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 diff --git a/packages/network-core/test/networkExamples/network1/network-input.yml b/packages/network-core/test/networkExamples/network1/network-input.yml new file mode 100644 index 000000000..b6e40fe46 --- /dev/null +++ b/packages/network-core/test/networkExamples/network1/network-input.yml @@ -0,0 +1,51 @@ +preset: custom-network-preset.yml +domain: mycompany.com +suffix: myc +networkDescription: My Company Private Test Network +networkType: 168 +nemesisGenerationHashSeed: 3EC4F5010EAD8F4439241F242611C292CE569587D571A80AD2E73511BE820387 +epochAdjustment: 1626086470 +rewardProgramControllerApiUrl: 'http://myc-node-monitoring.mycompany.com:7890' +isNewNetwork: true +faucetBalances: + - 449949995 + - 750 +deploymentData: + type: AWS +nodeTypes: + - nickName: demo + nodeType: HarvestingDemo + balances: + - 1000000 + - 150 + total: 1 + nodeSize: t3.xlarge + region: eu-east-1 + rootBlockSize: 750 + - nickName: dual + nodeType: HarvestingDual + balances: + - 3000000 + - 150 + total: 2 + nodeSize: t3.xlarge + region: eu-west-1 + rootBlockSize: 500 + - nickName: peer + nodeType: VotingNonHarvestingPeer + balances: + - 51000000 + - 0 + total: 2 + nodeSize: t3.large + region: us-west-1 + rootBlockSize: 250 + - nickName: beacon + nodeType: VotingPeer + balances: + - 3000000 + - 150 + total: 1 + nodeSize: t3.xlarge + region: us-east-1 + rootBlockSize: 250 diff --git a/packages/network-core/test/services/NetworkService.test.ts b/packages/network-core/test/services/NetworkService.test.ts new file mode 100644 index 000000000..3abd516fc --- /dev/null +++ b/packages/network-core/test/services/NetworkService.test.ts @@ -0,0 +1,56 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { expect } from 'chai'; +import { existsSync } from 'fs'; +import 'mocha'; +import { join } from 'path'; +import { BootstrapUtils, LoggerFactory, LogType } from 'symbol-bootstrap-core'; +import { LocalFileKeyStore, NetworkService, NetworkUtils } from '../../src'; + +const testFolder = 'target'; +const logger = LoggerFactory.getLogger(LogType.ConsoleLog); + +describe('NetworkSetup', () => { + it('network 1', async function () { + const testName = 'network1'; + const fromTestFolder = join('test', 'networkExamples', testName); + const fromExpectedFolder = join('test', 'networkExamples', `${testName}-expected`); + const targetFolder = join(testFolder, testName); + await BootstrapUtils.deleteFolder(logger, targetFolder); + expect(existsSync(fromTestFolder)).eq(true); + await BootstrapUtils.copyDir(fromTestFolder, targetFolder); + const service = new NetworkService(logger, targetFolder); + const keyStore = new LocalFileKeyStore(undefined, true, targetFolder); + const generatedNetworkFile = await service.expandNodes(keyStore); + await service.generateNemesis(keyStore, { regenerate: false, composeUser: '1000:1000' }); + await service.updateNodes(keyStore, { offline: true, nodePassword: undefined, composeUser: '1000:1000' }); + + const generatedCustomNetworkPreset = await BootstrapUtils.loadYaml(join(targetFolder, NetworkUtils.NETWORK_PRESET_FILE), undefined); + + const expectedNetworkFile = await BootstrapUtils.loadYaml(join(fromExpectedFolder, NetworkUtils.NETWORK_FILE), undefined); + expect(generatedNetworkFile).deep.eq(expectedNetworkFile); + const expectedCustomNetworkPreset = await BootstrapUtils.loadYaml( + join(fromExpectedFolder, NetworkUtils.NETWORK_PRESET_FILE), + undefined, + ); + expect(generatedCustomNetworkPreset).deep.eq(expectedCustomNetworkPreset); + + const generatedKeyStoreFile = await BootstrapUtils.loadYaml(join(targetFolder, NetworkUtils.KEY_STORE_FILE), undefined); + const expectedKeyStoreFile = await BootstrapUtils.loadYaml(join(fromExpectedFolder, NetworkUtils.KEY_STORE_FILE), undefined); + expect(generatedKeyStoreFile).deep.eq(expectedKeyStoreFile); + }); +}); diff --git a/packages/network-core/test/services/NetworkUtils.test.ts b/packages/network-core/test/services/NetworkUtils.test.ts new file mode 100644 index 000000000..7036a38b2 --- /dev/null +++ b/packages/network-core/test/services/NetworkUtils.test.ts @@ -0,0 +1,23 @@ +/* + * Copyright 2021 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { expect } from '@oclif/test'; +import { NetworkUtils } from '../../src/services'; + +describe('NetworkUtils', () => { + it('should startCase', function () { + expect(NetworkUtils.startCase('helloThere')).eq('Hello There'); + }); +}); diff --git a/packages/network-core/tsconfig.build.json b/packages/network-core/tsconfig.build.json new file mode 100644 index 000000000..a74389c9d --- /dev/null +++ b/packages/network-core/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.build.json", + + "compilerOptions": { + "outDir": "./lib" + }, + + "include": ["src/**/*"] +} diff --git a/packages/network-core/tsconfig.json b/packages/network-core/tsconfig.json new file mode 100644 index 000000000..63b5082a6 --- /dev/null +++ b/packages/network-core/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/presets/bootstrap/assembly-full.yml b/presets/bootstrap/assembly-full.yml deleted file mode 100644 index 7e7c7d2ee..000000000 --- a/presets/bootstrap/assembly-full.yml +++ /dev/null @@ -1,6 +0,0 @@ -explorers: - - repeat: 1 -wallets: - - repeat: 1 -faucets: - - repeat: 1 diff --git a/presets/bootstrap/assembly-light.yml b/presets/bootstrap/assembly-light.yml deleted file mode 100644 index a3ae1d5a8..000000000 --- a/presets/bootstrap/assembly-light.yml +++ /dev/null @@ -1,17 +0,0 @@ -databases: - - repeat: 1 -nodes: - - repeat: 0 - - repeat: 1 - harvesting: true - openPort: '{{add $index 7900}}' - voting: true - api: true -gateways: - - repeat: 1 -explorers: - - repeat: 0 -wallets: - - repeat: 0 -faucets: - - repeat: 0 diff --git a/presets/bootstrap/network.yml b/presets/bootstrap/network.yml deleted file mode 100644 index e99b05c17..000000000 --- a/presets/bootstrap/network.yml +++ /dev/null @@ -1,129 +0,0 @@ -initialCurrencyAtomicUnits: 8998999998000000 -maxMosaicAtomicUnits: 9000000000000000 -totalChainImportance: 15000000 -minHarvesterBalance: 500 -maxHarvesterBalance: 50000000000000 -networkType: 152 -minVoterBalance: 50000 -baseNamespace: 'cat' -currencyName: 'currency' -harvestingName: 'harvest' -explorerUrl: http://localhost:90/ -faucetUrl: http://localhost:100/ -beneficiaryAddress: '' -votingKeyDesiredLifetime: 720 -votingKeyDesiredFutureLifetime: 120 -lastKnownNetworkEpoch: 1 -restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' -nemesis: - mosaics: - - name: '{{currencyName}}' - repeat: 1 - divisibility: 6 - duration: 0 - supply: 8998999998000000 - isTransferable: true - isSupplyMutable: false - isRestrictable: false - accounts: 5 - - name: '{{harvestingName}}' - repeat: 1 - divisibility: 3 - duration: 0 - supply: 15000000 - isTransferable: true - isSupplyMutable: true - isRestrictable: false - accounts: 2 -databases: - - repeat: 1 - name: 'db-{{$index}}' - openPort: '{{add $index 27017}}' -nodes: - - repeat: 2 - harvesting: true - voting: true - api: false - name: 'peer-node-{{$index}}' - friendlyName: 'peer-node-{{$index}}' - host: 'peer-node-{{$index}}' - openPort: '{{add $index 7900}}' - - repeat: 1 - harvesting: false - api: true - friendlyName: 'api-node-{{$index}}' - name: 'api-node-{{$index}}' - host: 'api-node-{{$index}}' - brokerName: 'api-node-broker-{{$index}}' - brokerOpenPort: '{{add $index 8002}}' - databaseHost: 'db-{{$index}}' - trustedHosts: '127.0.0.1, 172.20.0.{{add $index 25}}' - localNetworks: '127.0.0.1, 172.20.0.{{add $index 25}}' -gateways: - - repeat: 1 - apiNodeName: 'api-node-{{$index}}' - apiNodeHost: 'api-node-{{$index}}' - apiNodeBrokerHost: 'api-node-broker-{{$index}}' - name: 'rest-gateway-{{$index}}' - description: 'catapult development network' - databaseHost: 'db-{{$index}}' - openPort: '{{add $index 3000}}' - ipv4_address: '172.20.0.{{add $index 25}}' -wallets: - - repeat: 0 - title: 'Symbol Bootstrap Wallet' - name: 'wallet-{{$index}}' - defaultNodeUrl: 'http://localhost:{{add $index 3000}}' - namespaceName: '{{baseNamespace}}.{{currencyName}}' - openPort: '{{add $index 80}}' - restNodes: - - friendlyName: 'Bootstrap Rest $index' - url: 'http://localhost:{{add $index 3000}}' - roles: 2 -explorers: - - repeat: 0 - name: 'explorer-{{$index}}' - defaultNode: 'http://localhost:{{add $index 3000}}' - namespaceName: '{{baseNamespace}}.{{currencyName}}' - openPort: '{{add $index 90}}' - restNodes: - - 'http://localhost:{{add $index 3000}}' - footer: - link: - - href: https://nemflash.io/ - text: NEM News - icon: IconNewspaper - - href: https://forum.nem.io/ - text: Forum - icon: IconForum - - href: https://t.me/nemred - text: Telegram - icon: IconTelegram - - href: https://www.reddit.com/r/nem/ - text: Reddit - icon: IconReddit - - href: https://github.com/nemtech - text: Github - icon: IconGithub - - href: http://localhost:100/ - text: Faucet - icon: IconHomeCurrencyUsd -faucets: - - repeat: 0 - name: 'faucet-{{$index}}' - gateway: 'rest-gateway-{{$index}}' - environment: - DEFAULT_NODE: 'http://rest-gateway-{{$index}}:{{add $index 3000}}' - DEFAULT_NODE_CLIENT: 'http://localhost:{{add $index 3000}}' - NATIVE_CURRENCY_NAME: '{{baseNamespace}}.{{currencyName}}' - NATIVE_CURRENCY_OUT_MAX: 500000000 - NATIVE_CURRENCY_OUT_MIN: 100000000 - MAX_FEE: 5000000 - ENOUGH_BALANCE: 100000000000 - MAX_UNCONFIRMED: 99 - BLACKLIST_MOSAIC_IDS: '[]' - EXPLORER_URL: 'http://localhost:{{add $index 90}}/' - openPort: '{{add $index 100}}' -inflation: - starting-at-height-1: 0 - starting-at-height-10000: 0 diff --git a/presets/mainnet/assembly-api.yml b/presets/mainnet/assembly-api.yml deleted file mode 100644 index 4d54d6670..000000000 --- a/presets/mainnet/assembly-api.yml +++ /dev/null @@ -1,22 +0,0 @@ -databases: - - name: 'db' - openPort: false -nodes: - - harvesting: false - api: true - name: 'node' - databaseHost: 'db' - brokerName: 'broker' - openPort: true - brokerOpenPort: false - trustedHosts: 127.0.0.1, 172.20.0.25 - localNetworks: 127.0.0.1, 172.20.0.25 -gateways: - - name: 'rest-gateway' - apiNodeName: 'node' - apiNodeHost: 'node' - apiNodeBrokerHost: 'broker' - description: 'catapult public main network' - databaseHost: 'db' - openPort: true - ipv4_address: 172.20.0.25 diff --git a/presets/mainnet/assembly-dual.yml b/presets/mainnet/assembly-dual.yml deleted file mode 100644 index 104f965cb..000000000 --- a/presets/mainnet/assembly-dual.yml +++ /dev/null @@ -1,22 +0,0 @@ -databases: - - name: 'db' - openPort: false -nodes: - - harvesting: true - api: true - name: 'node' - databaseHost: 'db' - brokerName: 'broker' - openPort: true - brokerOpenPort: false - trustedHosts: 127.0.0.1, 172.20.0.25 - localNetworks: 127.0.0.1, 172.20.0.25 -gateways: - - name: 'rest-gateway' - apiNodeName: 'node' - apiNodeHost: 'node' - apiNodeBrokerHost: 'broker' - description: 'catapult public main network' - databaseHost: 'db' - openPort: true - ipv4_address: 172.20.0.25 diff --git a/presets/mainnet/network.yml b/presets/mainnet/network.yml deleted file mode 100644 index 07ce09426..000000000 --- a/presets/mainnet/network.yml +++ /dev/null @@ -1,1330 +0,0 @@ -assemblies: 'api, dual, peer' -baseNamespace: symbol -batchVerificationRandomSource: /dev/urandom -currencyMosaicId: 6BED913FA20223F8 -currencyName: xym -harvestBeneficiaryPercentage: 25 -harvestingName: xym -harvestingMosaicId: 6BED913FA20223F8 -epochAdjustment: 1615853185s -enableRevoteOnBoot: false -maxHarvesterBalance: 50000000000000 -maxMosaicAtomicUnits: 8999999999000000 -minHarvesterBalance: 10000000000 -minVoterBalance: 3000000000000 -nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 -harvestNetworkFeeSinkAddress: NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI -namespaceRentalFeeSinkAddress: NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA -mosaicRentalFeeSinkAddress: NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA -nemesisSignerPublicKey: BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F -networkType: 104 -rewardProgramCaFile: >- - LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHVWJMZ1FuUEU4azc2VUczNWNGME9yNWh6M1RNQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFV4TlRVMFdoY05OREV3Ck5ESXhNVFV4TlRVMFdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUNGMEJ5NENlTTV3MWxoZWU3YVlzb0YvbEJMT29kZDI0ZWhqa3k0NnV4djREQUZCZ01yClpYQURRUURneUhSeU1zbVpCV3pFZWlDczJWMVZ1dHFaNWxzZ2tWN0w4K2dxZ3NQTmpCajRlaUpWaDdHUWV0SEcKZXlFaWZoUXFwdnpqWmQycW9MWUNrYWV3TUNRRQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== -rewardProgramEnrollmentAddress: NDG2F6IHON7EDOXZCHSTSJ2YMUHDFXAQ2EUZHFA -rewardProgramControllerApiUrl: 'http://node-monitoring.symbolblockchain.io:7890' -totalChainImportance: 7842928625000000 -initialCurrencyAtomicUnits: 7842928625000000 -importanceGrouping: 720 -votingSetGrouping: 1440 -minVotingKeyLifetime: 112 -maxVotingKeyLifetime: 360 -votingKeyDesiredLifetime: 360 -votingKeyDesiredFutureLifetime: 60 -lastKnownNetworkEpoch: 181 -stepDuration: 5m -maxBlockFutureTime: 300ms -maxAccountRestrictionValues: 100 -maxSecretLockDuration: 365d -maxNamespaceDuration: 1825d -minNamespaceDuration: 30d -namespaceGracePeriodDuration: 30d -blockGenerationTargetTime: 30s -defaultDynamicFeeMultiplier: 100 -rootNamespaceRentalFeePerBlock: 2 -childNamespaceRentalFee: 100000 -mosaicRentalFee: 500000 -throttlingBurst: 80 -throttlingRate: 60 -fileDatabaseBatchSize: 100 -minProofSize: 0 -syncTimeout: 5m -maxChildNamespaces: 100 -nonVotingUnfinalizedBlocksDuration: 10m -votingUnfinalizedBlocksDuration: 0m -timeSynchronizationMinImportance: 10000000000 -restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' -knownRestGateways: - - 'http://ngl-dual-001.symbolblockchain.io:3000' - - 'http://ngl-dual-002.symbolblockchain.io:3000' - - 'http://ngl-dual-003.symbolblockchain.io:3000' - - 'http://ngl-dual-004.symbolblockchain.io:3000' - - 'http://ngl-dual-101.symbolblockchain.io:3000' - - 'http://ngl-dual-102.symbolblockchain.io:3000' - - 'http://ngl-dual-103.symbolblockchain.io:3000' - - 'http://ngl-dual-104.symbolblockchain.io:3000' - - 'http://ngl-dual-201.symbolblockchain.io:3000' - - 'http://ngl-dual-202.symbolblockchain.io:3000' - - 'http://ngl-dual-203.symbolblockchain.io:3000' - - 'http://ngl-dual-204.symbolblockchain.io:3000' - - 'http://ngl-dual-301.symbolblockchain.io:3000' - - 'http://ngl-dual-302.symbolblockchain.io:3000' - - 'http://ngl-dual-303.symbolblockchain.io:3000' - - 'http://ngl-dual-304.symbolblockchain.io:3000' - - 'http://ngl-dual-401.symbolblockchain.io:3000' - - 'http://ngl-dual-402.symbolblockchain.io:3000' - - 'http://ngl-dual-403.symbolblockchain.io:3000' - - 'http://ngl-dual-404.symbolblockchain.io:3000' - - 'http://ngl-dual-501.symbolblockchain.io:3000' - - 'http://ngl-dual-502.symbolblockchain.io:3000' - - 'http://ngl-dual-503.symbolblockchain.io:3000' - - 'http://ngl-dual-504.symbolblockchain.io:3000' - - 'http://ngl-dual-601.symbolblockchain.io:3000' - - 'http://ngl-dual-602.symbolblockchain.io:3000' - - 'http://ngl-dual-603.symbolblockchain.io:3000' - - 'http://ngl-dual-604.symbolblockchain.io:3000' - - 'http://ngl-dual-005.symbolblockchain.io:3000' - - 'http://ngl-dual-006.symbolblockchain.io:3000' - - 'http://ngl-dual-105.symbolblockchain.io:3000' - - 'http://ngl-dual-106.symbolblockchain.io:3000' - - 'http://ngl-dual-205.symbolblockchain.io:3000' - - 'http://ngl-dual-206.symbolblockchain.io:3000' - - 'http://ngl-dual-305.symbolblockchain.io:3000' - - 'http://ngl-dual-306.symbolblockchain.io:3000' - - 'http://ngl-dual-405.symbolblockchain.io:3000' - - 'http://ngl-dual-406.symbolblockchain.io:3000' - - 'http://ngl-dual-505.symbolblockchain.io:3000' - - 'http://ngl-dual-506.symbolblockchain.io:3000' - - 'http://ngl-dual-605.symbolblockchain.io:3000' - - 'http://ngl-dual-606.symbolblockchain.io:3000' - - 'http://ngl-api-001.symbolblockchain.io:3000' - - 'http://ngl-api-301.symbolblockchain.io:3000' - - 'http://ngl-api-401.symbolblockchain.io:3000' - - 'http://ngl-api-501.symbolblockchain.io:3000' - - 'http://ngl-api-601.symbolblockchain.io:3000' -knownPeers: - api-node: - - - publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD - endpoint: - host: ngl-dual-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-001 - roles: 'Api,Peer,Voting' - - - publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 - endpoint: - host: ngl-dual-002.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-002 - roles: 'Api,Peer,Voting' - - - publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 - endpoint: - host: ngl-dual-003.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-003 - roles: 'Api,Peer,Voting' - - - publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE - endpoint: - host: ngl-dual-004.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-004 - roles: 'Api,Peer,Voting' - - - publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B - endpoint: - host: ngl-dual-101.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-101 - roles: 'Api,Peer,Voting' - - - publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 - endpoint: - host: ngl-dual-102.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-102 - roles: 'Api,Peer,Voting' - - - publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 - endpoint: - host: ngl-dual-103.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-103 - roles: 'Api,Peer,Voting' - - - publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 - endpoint: - host: ngl-dual-104.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-104 - roles: 'Api,Peer,Voting' - - - publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 - endpoint: - host: ngl-dual-201.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-201 - roles: 'Api,Peer,Voting' - - - publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D - endpoint: - host: ngl-dual-202.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-202 - roles: 'Api,Peer,Voting' - - - publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 - endpoint: - host: ngl-dual-203.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-203 - roles: 'Api,Peer,Voting' - - - publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D - endpoint: - host: ngl-dual-204.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-204 - roles: 'Api,Peer,Voting' - - - publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA - endpoint: - host: ngl-dual-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-301 - roles: 'Api,Peer,Voting' - - - publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 - endpoint: - host: ngl-dual-302.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-302 - roles: 'Api,Peer,Voting' - - - publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 - endpoint: - host: ngl-dual-303.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-303 - roles: 'Api,Peer,Voting' - - - publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 - endpoint: - host: ngl-dual-304.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-304 - roles: 'Api,Peer,Voting' - - - publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 - endpoint: - host: ngl-dual-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-401 - roles: 'Api,Peer,Voting' - - - publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 - endpoint: - host: ngl-dual-402.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-402 - roles: 'Api,Peer,Voting' - - - publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 - endpoint: - host: ngl-dual-403.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-403 - roles: 'Api,Peer,Voting' - - - publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC - endpoint: - host: ngl-dual-404.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-404 - roles: 'Api,Peer,Voting' - - - publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D - endpoint: - host: ngl-dual-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-501 - roles: 'Api,Peer,Voting' - - - publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 - endpoint: - host: ngl-dual-502.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-502 - roles: 'Api,Peer,Voting' - - - publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B - endpoint: - host: ngl-dual-503.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-503 - roles: 'Api,Peer,Voting' - - - publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 - endpoint: - host: ngl-dual-504.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-504 - roles: 'Api,Peer,Voting' - - - publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A - endpoint: - host: ngl-dual-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-601 - roles: 'Api,Peer,Voting' - - - publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 - endpoint: - host: ngl-dual-602.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-602 - roles: 'Api,Peer,Voting' - - - publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF - endpoint: - host: ngl-dual-603.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-603 - roles: 'Api,Peer,Voting' - - - publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF - endpoint: - host: ngl-dual-604.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-604 - roles: 'Api,Peer,Voting' - - - publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 - endpoint: - host: ngl-dual-005.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-005 - roles: 'Api,Peer' - - - publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 - endpoint: - host: ngl-dual-006.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-006 - roles: 'Api,Peer' - - - publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 - endpoint: - host: ngl-dual-105.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-105 - roles: 'Api,Peer' - - - publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 - endpoint: - host: ngl-dual-106.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-106 - roles: 'Api,Peer' - - - publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 - endpoint: - host: ngl-dual-205.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-205 - roles: 'Api,Peer' - - - publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 - endpoint: - host: ngl-dual-206.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-206 - roles: 'Api,Peer' - - - publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 - endpoint: - host: ngl-dual-305.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-305 - roles: 'Api,Peer' - - - publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA - endpoint: - host: ngl-dual-306.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-306 - roles: 'Api,Peer' - - - publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 - endpoint: - host: ngl-dual-405.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-405 - roles: 'Api,Peer' - - - publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F - endpoint: - host: ngl-dual-406.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-406 - roles: 'Api,Peer' - - - publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 - endpoint: - host: ngl-dual-505.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-505 - roles: 'Api,Peer' - - - publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C - endpoint: - host: ngl-dual-506.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-506 - roles: 'Api,Peer' - - - publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 - endpoint: - host: ngl-dual-605.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-605 - roles: 'Api,Peer' - - - publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC - endpoint: - host: ngl-dual-606.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-606 - roles: 'Api,Peer' - - - publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 - endpoint: - host: ngl-api-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-001 - roles: Api - - - publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 - endpoint: - host: ngl-api-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-301 - roles: Api - - - publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B - endpoint: - host: ngl-api-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-401 - roles: Api - - - publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 - endpoint: - host: ngl-api-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-501 - roles: Api - - - publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C - endpoint: - host: ngl-api-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-601 - roles: Api - peer-node: - - - publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF - endpoint: - host: ngl-beacon-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-001 - roles: 'Peer,Voting' - - - publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF - endpoint: - host: ngl-beacon-101.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-101 - roles: 'Peer,Voting' - - - publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 - endpoint: - host: ngl-beacon-201.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-201 - roles: 'Peer,Voting' - - - publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C - endpoint: - host: ngl-beacon-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-301 - roles: 'Peer,Voting' - - - publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 - endpoint: - host: ngl-beacon-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-401 - roles: 'Peer,Voting' - - - publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 - endpoint: - host: ngl-beacon-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-501 - roles: 'Peer,Voting' - - - publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A - endpoint: - host: ngl-beacon-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-601 - roles: 'Peer,Voting' - - - publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F - endpoint: - host: ngl-beacon-002.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-002 - roles: 'Peer,Voting' - - - publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 - endpoint: - host: ngl-beacon-102.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-102 - roles: 'Peer,Voting' - - - publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 - endpoint: - host: ngl-beacon-202.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-202 - roles: 'Peer,Voting' - - - publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 - endpoint: - host: ngl-beacon-302.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-302 - roles: 'Peer,Voting' - - - publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 - endpoint: - host: ngl-beacon-402.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-402 - roles: 'Peer,Voting' - - - publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 - endpoint: - host: ngl-beacon-502.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-502 - roles: 'Peer,Voting' - - - publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD - endpoint: - host: ngl-beacon-602.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-602 - roles: 'Peer,Voting' - - - publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 - endpoint: - host: ngl-beacon-003.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-003 - roles: Peer - - - publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 - endpoint: - host: ngl-beacon-004.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-004 - roles: Peer - - - publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A - endpoint: - host: ngl-beacon-103.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-103 - roles: Peer - - - publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A - endpoint: - host: ngl-beacon-104.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-104 - roles: Peer - - - publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E - endpoint: - host: ngl-beacon-203.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-203 - roles: Peer - - - publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B - endpoint: - host: ngl-beacon-204.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-204 - roles: Peer - - - publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA - endpoint: - host: ngl-beacon-303.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-303 - roles: Peer - - - publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB - endpoint: - host: ngl-beacon-304.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-304 - roles: Peer - - - publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 - endpoint: - host: ngl-beacon-403.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-403 - roles: Peer - - - publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 - endpoint: - host: ngl-beacon-404.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-404 - roles: Peer - - - publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 - endpoint: - host: ngl-beacon-503.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-503 - roles: Peer - - - publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 - endpoint: - host: ngl-beacon-504.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-504 - roles: Peer - - - publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A - endpoint: - host: ngl-beacon-603.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-603 - roles: Peer - - - publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 - endpoint: - host: ngl-beacon-604.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-604 - roles: Peer - - - publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 - endpoint: - host: ngl-peer-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-001 - roles: Peer - - - publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 - endpoint: - host: ngl-peer-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-301 - roles: Peer - - - publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 - endpoint: - host: ngl-peer-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-401 - roles: Peer - - - publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 - endpoint: - host: ngl-peer-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-601 - roles: Peer - - - publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 - endpoint: - host: ngl-peer-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-501 - roles: Peer - - - publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D - endpoint: - host: ngl-peer-002.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-002 - roles: 'Peer,Voting' - - - publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 - endpoint: - host: ngl-peer-003.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-003 - roles: 'Peer,Voting' - - - publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE - endpoint: - host: ngl-peer-004.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-004 - roles: 'Peer,Voting' - - - publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A - endpoint: - host: ngl-peer-101.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-101 - roles: 'Peer,Voting' - - - publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD - endpoint: - host: ngl-peer-102.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-102 - roles: 'Peer,Voting' - - - publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 - endpoint: - host: ngl-peer-103.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-103 - roles: 'Peer,Voting' - - - publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F - endpoint: - host: ngl-peer-201.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-201 - roles: 'Peer,Voting' - - - publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF - endpoint: - host: ngl-peer-202.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-202 - roles: 'Peer,Voting' - - - publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C - endpoint: - host: ngl-peer-302.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-302 - roles: 'Peer,Voting' - - - publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB - endpoint: - host: ngl-peer-303.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-303 - roles: 'Peer,Voting' - - - publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 - endpoint: - host: ngl-peer-304.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-304 - roles: 'Peer,Voting' - - - publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 - endpoint: - host: ngl-peer-402.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-402 - roles: 'Peer,Voting' - - - publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD - endpoint: - host: ngl-peer-403.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-403 - roles: 'Peer,Voting' - - - publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D - endpoint: - host: ngl-peer-404.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-404 - roles: 'Peer,Voting' - - - publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 - endpoint: - host: ngl-peer-502.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-502 - roles: 'Peer,Voting' - - - publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF - endpoint: - host: ngl-peer-503.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-503 - roles: 'Peer,Voting' - - - publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 - endpoint: - host: ngl-peer-504.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-504 - roles: 'Peer,Voting' - - - publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 - endpoint: - host: ngl-peer-602.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-602 - roles: 'Peer,Voting' - - - publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 - endpoint: - host: ngl-peer-603.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-603 - roles: 'Peer,Voting' - - - publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 - endpoint: - host: ngl-peer-604.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-604 - roles: 'Peer,Voting' -inflation: - starting-at-height-2: 0 - starting-at-height-5760: 191997042 - starting-at-height-172799: 183764522 - starting-at-height-435299: 175884998 - starting-at-height-697799: 168343336 - starting-at-height-960299: 161125048 - starting-at-height-1222799: 154216270 - starting-at-height-1485299: 147603728 - starting-at-height-1747799: 141274720 - starting-at-height-2010299: 135217090 - starting-at-height-2272799: 129419202 - starting-at-height-2535299: 123869918 - starting-at-height-2797799: 118558578 - starting-at-height-3060299: 113474978 - starting-at-height-3322799: 108609356 - starting-at-height-3585299: 103952364 - starting-at-height-3847799: 99495056 - starting-at-height-4110299: 95228870 - starting-at-height-4372799: 91145612 - starting-at-height-4635299: 87237436 - starting-at-height-4897799: 83496838 - starting-at-height-5160299: 79916630 - starting-at-height-5422799: 76489934 - starting-at-height-5685299: 73210170 - starting-at-height-5947799: 70071038 - starting-at-height-6210299: 67066506 - starting-at-height-6472799: 64190804 - starting-at-height-6735299: 61438406 - starting-at-height-6997799: 58804028 - starting-at-height-7260299: 56282608 - starting-at-height-7522799: 53869300 - starting-at-height-7785299: 51559472 - starting-at-height-8047799: 49348686 - starting-at-height-8310299: 47232696 - starting-at-height-8572799: 45207434 - starting-at-height-8835299: 43269014 - starting-at-height-9097799: 41413708 - starting-at-height-9360299: 39637956 - starting-at-height-9622799: 37938346 - starting-at-height-9885299: 36311610 - starting-at-height-10147799: 34754628 - starting-at-height-10410299: 33264406 - starting-at-height-10672799: 31838082 - starting-at-height-10935299: 30472918 - starting-at-height-11197799: 29166288 - starting-at-height-11460299: 27915686 - starting-at-height-11722799: 26718706 - starting-at-height-11985299: 25573052 - starting-at-height-12247799: 24476520 - starting-at-height-12510299: 23427008 - starting-at-height-12772799: 22422496 - starting-at-height-13035299: 21461056 - starting-at-height-13297799: 20540840 - starting-at-height-13560299: 19660082 - starting-at-height-13822799: 18817090 - starting-at-height-14085299: 18010244 - starting-at-height-14347799: 17237994 - starting-at-height-14610299: 16498858 - starting-at-height-14872799: 15791412 - starting-at-height-15135299: 15114302 - starting-at-height-15397799: 14466226 - starting-at-height-15660299: 13845938 - starting-at-height-15922799: 13252246 - starting-at-height-16185299: 12684012 - starting-at-height-16447799: 12140142 - starting-at-height-16710299: 11619592 - starting-at-height-16972799: 11121364 - starting-at-height-17235299: 10644498 - starting-at-height-17497799: 10188078 - starting-at-height-17760299: 9751230 - starting-at-height-18022799: 9333114 - starting-at-height-18285299: 8932924 - starting-at-height-18547799: 8549896 - starting-at-height-18810299: 8183290 - starting-at-height-19072799: 7832404 - starting-at-height-19335299: 7496562 - starting-at-height-19597799: 7175122 - starting-at-height-19860299: 6867464 - starting-at-height-20122799: 6573000 - starting-at-height-20385299: 6291160 - starting-at-height-20647799: 6021404 - starting-at-height-20910299: 5763216 - starting-at-height-21172799: 5516100 - starting-at-height-21435299: 5279578 - starting-at-height-21697799: 5053198 - starting-at-height-21960299: 4836526 - starting-at-height-22222799: 4629144 - starting-at-height-22485299: 4430652 - starting-at-height-22747799: 4240674 - starting-at-height-23010299: 4058840 - starting-at-height-23272799: 3884804 - starting-at-height-23535299: 3718230 - starting-at-height-23797799: 3558798 - starting-at-height-24060299: 3406202 - starting-at-height-24322799: 3260150 - starting-at-height-24585299: 3120360 - starting-at-height-24847799: 2986564 - starting-at-height-25110299: 2858506 - starting-at-height-25372799: 2735938 - starting-at-height-25635299: 2618624 - starting-at-height-25897799: 2506342 - starting-at-height-26160299: 2398874 - starting-at-height-26422799: 2296014 - starting-at-height-26685299: 2197564 - starting-at-height-26947799: 2103336 - starting-at-height-27210299: 2013150 - starting-at-height-27472799: 1926828 - starting-at-height-27735299: 1844210 - starting-at-height-27997799: 1765132 - starting-at-height-28260299: 1689446 - starting-at-height-28522799: 1617006 - starting-at-height-28785299: 1547672 - starting-at-height-29047799: 1481310 - starting-at-height-29310299: 1417794 - starting-at-height-29572799: 1357000 - starting-at-height-29835299: 1298814 - starting-at-height-30097799: 1243124 - starting-at-height-30360299: 1189820 - starting-at-height-30622799: 1138802 - starting-at-height-30885299: 1089972 - starting-at-height-31147799: 1043236 - starting-at-height-31410299: 998504 - starting-at-height-31672799: 955690 - starting-at-height-31935299: 914712 - starting-at-height-32197799: 875490 - starting-at-height-32460299: 837950 - starting-at-height-32722799: 802020 - starting-at-height-32985299: 767630 - starting-at-height-33247799: 734716 - starting-at-height-33510299: 703212 - starting-at-height-33772799: 673060 - starting-at-height-34035299: 644200 - starting-at-height-34297799: 616578 - starting-at-height-34560299: 590140 - starting-at-height-34822799: 564836 - starting-at-height-35085299: 540616 - starting-at-height-35347799: 517436 - starting-at-height-35610299: 495248 - starting-at-height-35872799: 474014 - starting-at-height-36135299: 453688 - starting-at-height-36397799: 434234 - starting-at-height-36660299: 415616 - starting-at-height-36922799: 397794 - starting-at-height-37185299: 380738 - starting-at-height-37447799: 364412 - starting-at-height-37710299: 348786 - starting-at-height-37972799: 333832 - starting-at-height-38235299: 319518 - starting-at-height-38497799: 305816 - starting-at-height-38760299: 292704 - starting-at-height-39022799: 280154 - starting-at-height-39285299: 268140 - starting-at-height-39547799: 256644 - starting-at-height-39810299: 245638 - starting-at-height-40072799: 235106 - starting-at-height-40335299: 225026 - starting-at-height-40597799: 215376 - starting-at-height-40860299: 206142 - starting-at-height-41122799: 197302 - starting-at-height-41385299: 188842 - starting-at-height-41647799: 180744 - starting-at-height-41910299: 172994 - starting-at-height-42172799: 165578 - starting-at-height-42435299: 158478 - starting-at-height-42697799: 151682 - starting-at-height-42960299: 145178 - starting-at-height-43222799: 138954 - starting-at-height-43485299: 132994 - starting-at-height-43747799: 127292 - starting-at-height-44010299: 121834 - starting-at-height-44272799: 116610 - starting-at-height-44535299: 111610 - starting-at-height-44797799: 106824 - starting-at-height-45060299: 102244 - starting-at-height-45322799: 97860 - starting-at-height-45585299: 93664 - starting-at-height-45847799: 89648 - starting-at-height-46110299: 85804 - starting-at-height-46372799: 82124 - starting-at-height-46635299: 78602 - starting-at-height-46897799: 75232 - starting-at-height-47160299: 72006 - starting-at-height-47422799: 68920 - starting-at-height-47685299: 65964 - starting-at-height-47947799: 63136 - starting-at-height-48210299: 60428 - starting-at-height-48472799: 57838 - starting-at-height-48735299: 55358 - starting-at-height-48997799: 52984 - starting-at-height-49260299: 50712 - starting-at-height-49522799: 48538 - starting-at-height-49785299: 46456 - starting-at-height-50047799: 44464 - starting-at-height-50310299: 42558 - starting-at-height-50572799: 40732 - starting-at-height-50835299: 38986 - starting-at-height-51097799: 37314 - starting-at-height-51360299: 35714 - starting-at-height-51622799: 34182 - starting-at-height-51885299: 32716 - starting-at-height-52147799: 31314 - starting-at-height-52410299: 29972 - starting-at-height-52672799: 28686 - starting-at-height-52935299: 27456 - starting-at-height-53197799: 26278 - starting-at-height-53460299: 25152 - starting-at-height-53722799: 24074 - starting-at-height-53985299: 23042 - starting-at-height-54247799: 22054 - starting-at-height-54510299: 21108 - starting-at-height-54772799: 20202 - starting-at-height-55035299: 19336 - starting-at-height-55297799: 18506 - starting-at-height-55560299: 17714 - starting-at-height-55822799: 16954 - starting-at-height-56085299: 16226 - starting-at-height-56347799: 15532 - starting-at-height-56610299: 14866 - starting-at-height-56872799: 14228 - starting-at-height-57135299: 13618 - starting-at-height-57397799: 13034 - starting-at-height-57660299: 12474 - starting-at-height-57922799: 11940 - starting-at-height-58185299: 11428 - starting-at-height-58447799: 10938 - starting-at-height-58710299: 10468 - starting-at-height-58972799: 10020 - starting-at-height-59235299: 9590 - starting-at-height-59497799: 9178 - starting-at-height-59760299: 8786 - starting-at-height-60022799: 8408 - starting-at-height-60285299: 8048 - starting-at-height-60547799: 7702 - starting-at-height-60810299: 7372 - starting-at-height-61072799: 7056 - starting-at-height-61335299: 6754 - starting-at-height-61597799: 6464 - starting-at-height-61860299: 6186 - starting-at-height-62122799: 5922 - starting-at-height-62385299: 5668 - starting-at-height-62647799: 5424 - starting-at-height-62910299: 5192 - starting-at-height-63172799: 4970 - starting-at-height-63435299: 4756 - starting-at-height-63697799: 4552 - starting-at-height-63960299: 4356 - starting-at-height-64222799: 4170 - starting-at-height-64485299: 3992 - starting-at-height-64747799: 3820 - starting-at-height-65010299: 3656 - starting-at-height-65272799: 3500 - starting-at-height-65535299: 3350 - starting-at-height-65797799: 3206 - starting-at-height-66060299: 3068 - starting-at-height-66322799: 2936 - starting-at-height-66585299: 2810 - starting-at-height-66847799: 2690 - starting-at-height-67110299: 2574 - starting-at-height-67372799: 2464 - starting-at-height-67635299: 2358 - starting-at-height-67897799: 2258 - starting-at-height-68160299: 2160 - starting-at-height-68422799: 2068 - starting-at-height-68685299: 1980 - starting-at-height-68947799: 1894 - starting-at-height-69210299: 1812 - starting-at-height-69472799: 1736 - starting-at-height-69735299: 1660 - starting-at-height-69997799: 1590 - starting-at-height-70260299: 1522 - starting-at-height-70522799: 1456 - starting-at-height-70785299: 1394 - starting-at-height-71047799: 1334 - starting-at-height-71310299: 1276 - starting-at-height-71572799: 1222 - starting-at-height-71835299: 1170 - starting-at-height-72097799: 1120 - starting-at-height-72360299: 1072 - starting-at-height-72622799: 1026 - starting-at-height-72885299: 982 - starting-at-height-73147799: 938 - starting-at-height-73410299: 898 - starting-at-height-73672799: 860 - starting-at-height-73935299: 824 - starting-at-height-74197799: 788 - starting-at-height-74460299: 754 - starting-at-height-74722799: 722 - starting-at-height-74985299: 690 - starting-at-height-75247799: 662 - starting-at-height-75510299: 632 - starting-at-height-75772799: 606 - starting-at-height-76035299: 580 - starting-at-height-76297799: 554 - starting-at-height-76560299: 530 - starting-at-height-76822799: 508 - starting-at-height-77085299: 486 - starting-at-height-77347799: 466 - starting-at-height-77610299: 446 - starting-at-height-77872799: 426 - starting-at-height-78135299: 408 - starting-at-height-78397799: 390 - starting-at-height-78660299: 374 - starting-at-height-78922799: 358 - starting-at-height-79185299: 342 - starting-at-height-79447799: 328 - starting-at-height-79710299: 314 - starting-at-height-79972799: 300 - starting-at-height-80235299: 286 - starting-at-height-80497799: 274 - starting-at-height-80760299: 262 - starting-at-height-81022799: 252 - starting-at-height-81285299: 240 - starting-at-height-81547799: 230 - starting-at-height-81810299: 220 - starting-at-height-82072799: 210 - starting-at-height-82335299: 202 - starting-at-height-82597799: 194 - starting-at-height-82860299: 184 - starting-at-height-83122799: 176 - starting-at-height-83385299: 170 - starting-at-height-83647799: 162 - starting-at-height-83910299: 154 - starting-at-height-84172799: 148 - starting-at-height-84435299: 142 - starting-at-height-84697799: 136 - starting-at-height-84960299: 130 - starting-at-height-85222799: 124 - starting-at-height-85485299: 118 - starting-at-height-85747799: 114 - starting-at-height-86010299: 108 - starting-at-height-86272799: 104 - starting-at-height-86535299: 100 - starting-at-height-86797799: 96 - starting-at-height-87060299: 92 - starting-at-height-87322799: 88 - starting-at-height-87585299: 84 - starting-at-height-87847799: 80 - starting-at-height-88110299: 76 - starting-at-height-88372799: 72 - starting-at-height-88635299: 70 - starting-at-height-88897799: 66 - starting-at-height-89160299: 64 - starting-at-height-89422799: 62 - starting-at-height-89685299: 58 - starting-at-height-89947799: 56 - starting-at-height-90210299: 54 - starting-at-height-90472799: 52 - starting-at-height-90735299: 48 - starting-at-height-90997799: 46 - starting-at-height-91260299: 44 - starting-at-height-91522799: 42 - starting-at-height-91785299: 40 - starting-at-height-92047799: 40 - starting-at-height-92310299: 38 - starting-at-height-92572799: 36 - starting-at-height-92835299: 34 - starting-at-height-93097799: 32 - starting-at-height-93360299: 32 - starting-at-height-93622799: 30 - starting-at-height-93885299: 28 - starting-at-height-94147799: 28 - starting-at-height-94410299: 26 - starting-at-height-94672799: 24 - starting-at-height-94935299: 24 - starting-at-height-95197799: 22 - starting-at-height-95460299: 22 - starting-at-height-95722799: 20 - starting-at-height-95985299: 20 - starting-at-height-96247799: 18 - starting-at-height-96510299: 18 - starting-at-height-96772799: 18 - starting-at-height-97035299: 16 - starting-at-height-97297799: 16 - starting-at-height-97560299: 14 - starting-at-height-97822799: 14 - starting-at-height-98085299: 14 - starting-at-height-98347799: 12 - starting-at-height-98610299: 12 - starting-at-height-98872799: 12 - starting-at-height-99135299: 12 - starting-at-height-99397799: 10 - starting-at-height-99660299: 10 - starting-at-height-99922799: 10 - starting-at-height-100185299: 10 - starting-at-height-100447799: 8 - starting-at-height-100710299: 8 - starting-at-height-100972799: 8 - starting-at-height-101235299: 8 - starting-at-height-101497799: 8 - starting-at-height-101760299: 6 - starting-at-height-102022799: 6 - starting-at-height-102285299: 6 - starting-at-height-102547799: 6 - starting-at-height-102810299: 6 - starting-at-height-103072799: 6 - starting-at-height-103335299: 6 - starting-at-height-103597799: 4 - starting-at-height-103860299: 4 - starting-at-height-104122799: 4 - starting-at-height-104385299: 4 - starting-at-height-104647799: 4 - starting-at-height-104910299: 4 - starting-at-height-105172799: 4 - starting-at-height-105435299: 4 - starting-at-height-105697799: 4 - starting-at-height-105960299: 2 - starting-at-height-106222799: 2 - starting-at-height-106485299: 2 - starting-at-height-106747799: 2 - starting-at-height-107010299: 2 - starting-at-height-107272799: 2 - starting-at-height-107535299: 2 - starting-at-height-107797799: 2 - starting-at-height-108060299: 2 - starting-at-height-108322799: 2 - starting-at-height-108585299: 2 - starting-at-height-108847799: 2 - starting-at-height-109110299: 2 - starting-at-height-109372799: 2 - starting-at-height-109635299: 2 - starting-at-height-109897799: 2 - starting-at-height-110160299: 1 - starting-at-height-110422799: 0 diff --git a/presets/testnet/assembly-api.yml b/presets/testnet/assembly-api.yml deleted file mode 100644 index 0c52118cd..000000000 --- a/presets/testnet/assembly-api.yml +++ /dev/null @@ -1,22 +0,0 @@ -databases: - - name: 'db' - openPort: false -nodes: - - harvesting: false - api: true - name: 'node' - databaseHost: 'db' - brokerName: 'broker' - openPort: true - brokerOpenPort: false - trustedHosts: 127.0.0.1, 172.20.0.25 - localNetworks: 127.0.0.1, 172.20.0.25 -gateways: - - name: 'rest-gateway' - apiNodeName: 'node' - apiNodeHost: 'node' - apiNodeBrokerHost: 'broker' - description: 'catapult public test network' - databaseHost: 'db' - openPort: true - ipv4_address: 172.20.0.25 diff --git a/presets/testnet/assembly-demo.yml b/presets/testnet/assembly-demo.yml deleted file mode 100644 index 827714c98..000000000 --- a/presets/testnet/assembly-demo.yml +++ /dev/null @@ -1,61 +0,0 @@ -explorerUrl: http://localhost:90/ -faucetUrl: http://localhost:100/ -databases: - - name: 'db' - openPort: false -nodes: - - harvesting: true - api: true - name: 'node' - databaseHost: 'db' - brokerName: 'broker' - openPort: true - brokerOpenPort: false - trustedHosts: 127.0.0.1, 172.20.0.25 - localNetworks: 127.0.0.1, 172.20.0.25 -gateways: - - name: 'rest-gateway' - apiNodeName: 'node' - apiNodeHost: 'node' - apiNodeBrokerHost: 'broker' - description: 'catapult public test network' - databaseHost: 'db' - openPort: true - ipv4_address: 172.20.0.25 -wallets: - - name: 'wallet' - title: 'Symbol Bootstrap Wallet' - defaultNodeUrl: 'http://localhost:3000' - namespaceName: '{{baseNamespace}}.{{currencyName}}' - openPort: '80' - restNodes: - - friendlyName: 'Bootstrap Rest' - url: 'http://localhost:3000' - roles: 2 -explorers: - - name: 'explorer' - defaultNode: 'http://localhost:3000' - namespaceName: '{{baseNamespace}}.{{currencyName}}' - openPort: '90' - restNodes: - - 'http://localhost:3000' - footer: - link: - - href: https://nemflash.io/ - text: NEM News - icon: IconNewspaper - - href: https://forum.nem.io/ - text: Forum - icon: IconForum - - href: https://t.me/nemred - text: Telegram - icon: IconTelegram - - href: https://www.reddit.com/r/nem/ - text: Reddit - icon: IconReddit - - href: https://github.com/nemtech - text: Github - icon: IconGithub - - href: http://localhost:100/ - text: Faucet - icon: IconHomeCurrencyUsd diff --git a/presets/testnet/assembly-dual.yml b/presets/testnet/assembly-dual.yml deleted file mode 100644 index 6ec842b8b..000000000 --- a/presets/testnet/assembly-dual.yml +++ /dev/null @@ -1,22 +0,0 @@ -databases: - - name: 'db' - openPort: false -nodes: - - harvesting: true - api: true - name: 'node' - databaseHost: 'db' - brokerName: 'broker' - openPort: true - brokerOpenPort: false - trustedHosts: 127.0.0.1, 172.20.0.25 - localNetworks: 127.0.0.1, 172.20.0.25 -gateways: - - name: 'rest-gateway' - apiNodeName: 'node' - apiNodeHost: 'node' - apiNodeBrokerHost: 'broker' - description: 'catapult public test network' - databaseHost: 'db' - openPort: true - ipv4_address: 172.20.0.25 diff --git a/presets/testnet/assembly-peer.yml b/presets/testnet/assembly-peer.yml deleted file mode 100644 index 151b501ff..000000000 --- a/presets/testnet/assembly-peer.yml +++ /dev/null @@ -1,6 +0,0 @@ -localNetworks: 127.0.0.1 -nodes: - - harvesting: true - api: false - name: 'node' - openPort: true diff --git a/presets/testnet/network.yml b/presets/testnet/network.yml deleted file mode 100644 index 0f781aac9..000000000 --- a/presets/testnet/network.yml +++ /dev/null @@ -1,696 +0,0 @@ -assemblies: 'api, dual, peer' -baseNamespace: symbol -batchVerificationRandomSource: /dev/urandom -currencyMosaicId: 091F837E059AE13C -currencyName: xym -harvestBeneficiaryPercentage: 25 -harvestingName: xym -harvestingMosaicId: 091F837E059AE13C -epochAdjustment: 1616694977s -enableRevoteOnBoot: false -maxHarvesterBalance: 50000000000000 -maxMosaicAtomicUnits: 8999999999000000 -minHarvesterBalance: 10000000000 -minVoterBalance: 3000000000000 -nemesisGenerationHashSeed: 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155 -harvestNetworkFeeSinkAddress: TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA -namespaceRentalFeeSinkAddress: TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A -mosaicRentalFeeSinkAddress: TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA -nemesisSignerPublicKey: 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2 -networkType: 152 -rewardProgramCaFile: >- - LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZVENDQVJNQ0ZHTGt2L1dUM2J0NmltLytTckdrSUJuRnhBMW5NQVVHQXl0bGNEQlRNUm93R0FZRFZRUUsKREJGT1JVMGdSM0p2ZFhBZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dApNUmd3RmdZRFZRUUxEQTlTWlhkaGNtUnpJRkJ5YjJkeVlXMHdIaGNOTWpFd05ESTJNVFEwTXpBMVdoY05OREV3Ck5ESXhNVFEwTXpBMVdqQlRNUm93R0FZRFZRUUtEQkZPUlUwZ1IzSnZkWEFnVEdsdGFYUmxaREViTUJrR0ExVUUKQXd3U2MzbHRZbTlzY0d4aGRHWnZjbTB1WTI5dE1SZ3dGZ1lEVlFRTERBOVNaWGRoY21SeklGQnliMmR5WVcwdwpLakFGQmdNclpYQURJUUFnTU5jWGpILzM2SmswRVFQODNGeEsrcUljcUZ6U29HdHNxN3diR1B2RmZ6QUZCZ01yClpYQURRUUR0RU5uTXFUS2M3eUp1MFN5SzZoalBLUDZWVjVvMHFjWTFXR3VVK3REOWxwbFBkWkRRSnhEZG5aWEMKV1JJQlROR0hYWjZNa1p5LzFIdTZpOEp6V0FVSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== -rewardProgramEnrollmentAddress: TDL73SDUMPDK7EOF7H3O4F5WB5WHG2SX7XUSFZQ -rewardProgramControllerApiUrl: 'http://node-monitoring.testnet.symboldev.network:7890' -totalChainImportance: 7842928625000000 -initialCurrencyAtomicUnits: 7842928625000000 -importanceGrouping: 180 -votingSetGrouping: 720 -votingKeyDesiredLifetime: 720 -votingKeyDesiredFutureLifetime: 120 -lastKnownNetworkEpoch: 235 -minVotingKeyLifetime: 28 -maxVotingKeyLifetime: 720 -stepDuration: 4m -maxBlockFutureTime: 300ms -maxAccountRestrictionValues: 100 -maxSecretLockDuration: 365d -maxNamespaceDuration: 1825d -minNamespaceDuration: 30d -namespaceGracePeriodDuration: 1d -blockGenerationTargetTime: 30s -defaultDynamicFeeMultiplier: 100 -rootNamespaceRentalFeePerBlock: 2 -childNamespaceRentalFee: 100000 -mosaicRentalFee: 500000 -throttlingBurst: 80 -throttlingRate: 60 -fileDatabaseBatchSize: 100 -minProofSize: 0 -syncTimeout: 5m -maxChildNamespaces: 100 -nonVotingUnfinalizedBlocksDuration: 10m -votingUnfinalizedBlocksDuration: 0m -timeSynchronizationMinImportance: 10000000000 -faucetUrl: 'http://faucet.testnet.symboldev.network' -explorerUrl: 'http://explorer.testnet.symboldev.network' -restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' -knownRestGateways: - - 'http://ngl-dual-501.testnet.symboldev.network:3000' - - 'http://ngl-dual-601.testnet.symboldev.network:3000' - - 'http://ngl-dual-001.testnet.symboldev.network:3000' - - 'http://ngl-dual-101.testnet.symboldev.network:3000' - - 'http://ngl-dual-201.testnet.symboldev.network:3000' - - 'http://ngl-dual-301.testnet.symboldev.network:3000' - - 'http://ngl-dual-401.testnet.symboldev.network:3000' - - 'http://ngl-dual-502.testnet.symboldev.network:3000' - - 'http://ngl-dual-602.testnet.symboldev.network:3000' - - 'http://ngl-api-001.testnet.symboldev.network:3000' - - 'http://ngl-api-101.testnet.symboldev.network:3000' -knownPeers: - api-node: - - - publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 - endpoint: - host: ngl-dual-501.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-501 - roles: 'Api,Peer,Voting' - - - publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 - endpoint: - host: ngl-dual-601.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-601 - roles: 'Api,Peer,Voting' - - - publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 - endpoint: - host: ngl-dual-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-001 - roles: 'Api,Peer' - - - publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 - endpoint: - host: ngl-dual-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-101 - roles: 'Api,Peer' - - - publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 - endpoint: - host: ngl-dual-201.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-201 - roles: 'Api,Peer' - - - publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C - endpoint: - host: ngl-dual-301.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-301 - roles: 'Api,Peer' - - - publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 - endpoint: - host: ngl-dual-401.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-401 - roles: 'Api,Peer' - - - publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 - endpoint: - host: ngl-dual-502.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-502 - roles: 'Api,Peer' - - - publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 - endpoint: - host: ngl-dual-602.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-602 - roles: 'Api,Peer' - - - publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 - endpoint: - host: ngl-api-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-api-001 - roles: Api - - - publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F - endpoint: - host: ngl-api-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-api-101 - roles: Api - peer-node: - - - publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F - endpoint: - host: ngl-beacon-501.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-501 - roles: 'Peer,Voting' - - - publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 - endpoint: - host: ngl-beacon-601.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-601 - roles: 'Peer,Voting' - - - publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D - endpoint: - host: ngl-beacon-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-001 - roles: 'Peer,Voting' - - - publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 - endpoint: - host: ngl-beacon-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-101 - roles: 'Peer,Voting' - - - publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 - endpoint: - host: ngl-beacon-401.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-401 - roles: Peer - - - publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C - endpoint: - host: ngl-peer-201.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-201 - roles: Peer - - - publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 - endpoint: - host: ngl-peer-301.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-301 - roles: Peer - - - publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 - endpoint: - host: ngl-peer-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-001 - roles: 'Peer,Voting' - - - publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE - endpoint: - host: ngl-peer-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-101 - roles: 'Peer,Voting' - - - publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 - endpoint: - host: ngl-peer-202.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-202 - roles: 'Peer,Voting' - - - publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C - endpoint: - host: ngl-peer-302.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-302 - roles: 'Peer,Voting' - - - publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB - endpoint: - host: ngl-peer-401.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-401 - roles: 'Peer,Voting' - - - publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE - endpoint: - host: ngl-peer-501.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-501 - roles: 'Peer,Voting' - - - publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 - endpoint: - host: ngl-peer-601.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-601 - roles: 'Peer,Voting' -inflation: - starting-at-height-2: 0 - starting-at-height-5760: 191997042 - starting-at-height-172799: 183764522 - starting-at-height-435299: 175884998 - starting-at-height-697799: 168343336 - starting-at-height-960299: 161125048 - starting-at-height-1222799: 154216270 - starting-at-height-1485299: 147603728 - starting-at-height-1747799: 141274720 - starting-at-height-2010299: 135217090 - starting-at-height-2272799: 129419202 - starting-at-height-2535299: 123869918 - starting-at-height-2797799: 118558578 - starting-at-height-3060299: 113474978 - starting-at-height-3322799: 108609356 - starting-at-height-3585299: 103952364 - starting-at-height-3847799: 99495056 - starting-at-height-4110299: 95228870 - starting-at-height-4372799: 91145612 - starting-at-height-4635299: 87237436 - starting-at-height-4897799: 83496838 - starting-at-height-5160299: 79916630 - starting-at-height-5422799: 76489934 - starting-at-height-5685299: 73210170 - starting-at-height-5947799: 70071038 - starting-at-height-6210299: 67066506 - starting-at-height-6472799: 64190804 - starting-at-height-6735299: 61438406 - starting-at-height-6997799: 58804028 - starting-at-height-7260299: 56282608 - starting-at-height-7522799: 53869300 - starting-at-height-7785299: 51559472 - starting-at-height-8047799: 49348686 - starting-at-height-8310299: 47232696 - starting-at-height-8572799: 45207434 - starting-at-height-8835299: 43269014 - starting-at-height-9097799: 41413708 - starting-at-height-9360299: 39637956 - starting-at-height-9622799: 37938346 - starting-at-height-9885299: 36311610 - starting-at-height-10147799: 34754628 - starting-at-height-10410299: 33264406 - starting-at-height-10672799: 31838082 - starting-at-height-10935299: 30472918 - starting-at-height-11197799: 29166288 - starting-at-height-11460299: 27915686 - starting-at-height-11722799: 26718706 - starting-at-height-11985299: 25573052 - starting-at-height-12247799: 24476520 - starting-at-height-12510299: 23427008 - starting-at-height-12772799: 22422496 - starting-at-height-13035299: 21461056 - starting-at-height-13297799: 20540840 - starting-at-height-13560299: 19660082 - starting-at-height-13822799: 18817090 - starting-at-height-14085299: 18010244 - starting-at-height-14347799: 17237994 - starting-at-height-14610299: 16498858 - starting-at-height-14872799: 15791412 - starting-at-height-15135299: 15114302 - starting-at-height-15397799: 14466226 - starting-at-height-15660299: 13845938 - starting-at-height-15922799: 13252246 - starting-at-height-16185299: 12684012 - starting-at-height-16447799: 12140142 - starting-at-height-16710299: 11619592 - starting-at-height-16972799: 11121364 - starting-at-height-17235299: 10644498 - starting-at-height-17497799: 10188078 - starting-at-height-17760299: 9751230 - starting-at-height-18022799: 9333114 - starting-at-height-18285299: 8932924 - starting-at-height-18547799: 8549896 - starting-at-height-18810299: 8183290 - starting-at-height-19072799: 7832404 - starting-at-height-19335299: 7496562 - starting-at-height-19597799: 7175122 - starting-at-height-19860299: 6867464 - starting-at-height-20122799: 6573000 - starting-at-height-20385299: 6291160 - starting-at-height-20647799: 6021404 - starting-at-height-20910299: 5763216 - starting-at-height-21172799: 5516100 - starting-at-height-21435299: 5279578 - starting-at-height-21697799: 5053198 - starting-at-height-21960299: 4836526 - starting-at-height-22222799: 4629144 - starting-at-height-22485299: 4430652 - starting-at-height-22747799: 4240674 - starting-at-height-23010299: 4058840 - starting-at-height-23272799: 3884804 - starting-at-height-23535299: 3718230 - starting-at-height-23797799: 3558798 - starting-at-height-24060299: 3406202 - starting-at-height-24322799: 3260150 - starting-at-height-24585299: 3120360 - starting-at-height-24847799: 2986564 - starting-at-height-25110299: 2858506 - starting-at-height-25372799: 2735938 - starting-at-height-25635299: 2618624 - starting-at-height-25897799: 2506342 - starting-at-height-26160299: 2398874 - starting-at-height-26422799: 2296014 - starting-at-height-26685299: 2197564 - starting-at-height-26947799: 2103336 - starting-at-height-27210299: 2013150 - starting-at-height-27472799: 1926828 - starting-at-height-27735299: 1844210 - starting-at-height-27997799: 1765132 - starting-at-height-28260299: 1689446 - starting-at-height-28522799: 1617006 - starting-at-height-28785299: 1547672 - starting-at-height-29047799: 1481310 - starting-at-height-29310299: 1417794 - starting-at-height-29572799: 1357000 - starting-at-height-29835299: 1298814 - starting-at-height-30097799: 1243124 - starting-at-height-30360299: 1189820 - starting-at-height-30622799: 1138802 - starting-at-height-30885299: 1089972 - starting-at-height-31147799: 1043236 - starting-at-height-31410299: 998504 - starting-at-height-31672799: 955690 - starting-at-height-31935299: 914712 - starting-at-height-32197799: 875490 - starting-at-height-32460299: 837950 - starting-at-height-32722799: 802020 - starting-at-height-32985299: 767630 - starting-at-height-33247799: 734716 - starting-at-height-33510299: 703212 - starting-at-height-33772799: 673060 - starting-at-height-34035299: 644200 - starting-at-height-34297799: 616578 - starting-at-height-34560299: 590140 - starting-at-height-34822799: 564836 - starting-at-height-35085299: 540616 - starting-at-height-35347799: 517436 - starting-at-height-35610299: 495248 - starting-at-height-35872799: 474014 - starting-at-height-36135299: 453688 - starting-at-height-36397799: 434234 - starting-at-height-36660299: 415616 - starting-at-height-36922799: 397794 - starting-at-height-37185299: 380738 - starting-at-height-37447799: 364412 - starting-at-height-37710299: 348786 - starting-at-height-37972799: 333832 - starting-at-height-38235299: 319518 - starting-at-height-38497799: 305816 - starting-at-height-38760299: 292704 - starting-at-height-39022799: 280154 - starting-at-height-39285299: 268140 - starting-at-height-39547799: 256644 - starting-at-height-39810299: 245638 - starting-at-height-40072799: 235106 - starting-at-height-40335299: 225026 - starting-at-height-40597799: 215376 - starting-at-height-40860299: 206142 - starting-at-height-41122799: 197302 - starting-at-height-41385299: 188842 - starting-at-height-41647799: 180744 - starting-at-height-41910299: 172994 - starting-at-height-42172799: 165578 - starting-at-height-42435299: 158478 - starting-at-height-42697799: 151682 - starting-at-height-42960299: 145178 - starting-at-height-43222799: 138954 - starting-at-height-43485299: 132994 - starting-at-height-43747799: 127292 - starting-at-height-44010299: 121834 - starting-at-height-44272799: 116610 - starting-at-height-44535299: 111610 - starting-at-height-44797799: 106824 - starting-at-height-45060299: 102244 - starting-at-height-45322799: 97860 - starting-at-height-45585299: 93664 - starting-at-height-45847799: 89648 - starting-at-height-46110299: 85804 - starting-at-height-46372799: 82124 - starting-at-height-46635299: 78602 - starting-at-height-46897799: 75232 - starting-at-height-47160299: 72006 - starting-at-height-47422799: 68920 - starting-at-height-47685299: 65964 - starting-at-height-47947799: 63136 - starting-at-height-48210299: 60428 - starting-at-height-48472799: 57838 - starting-at-height-48735299: 55358 - starting-at-height-48997799: 52984 - starting-at-height-49260299: 50712 - starting-at-height-49522799: 48538 - starting-at-height-49785299: 46456 - starting-at-height-50047799: 44464 - starting-at-height-50310299: 42558 - starting-at-height-50572799: 40732 - starting-at-height-50835299: 38986 - starting-at-height-51097799: 37314 - starting-at-height-51360299: 35714 - starting-at-height-51622799: 34182 - starting-at-height-51885299: 32716 - starting-at-height-52147799: 31314 - starting-at-height-52410299: 29972 - starting-at-height-52672799: 28686 - starting-at-height-52935299: 27456 - starting-at-height-53197799: 26278 - starting-at-height-53460299: 25152 - starting-at-height-53722799: 24074 - starting-at-height-53985299: 23042 - starting-at-height-54247799: 22054 - starting-at-height-54510299: 21108 - starting-at-height-54772799: 20202 - starting-at-height-55035299: 19336 - starting-at-height-55297799: 18506 - starting-at-height-55560299: 17714 - starting-at-height-55822799: 16954 - starting-at-height-56085299: 16226 - starting-at-height-56347799: 15532 - starting-at-height-56610299: 14866 - starting-at-height-56872799: 14228 - starting-at-height-57135299: 13618 - starting-at-height-57397799: 13034 - starting-at-height-57660299: 12474 - starting-at-height-57922799: 11940 - starting-at-height-58185299: 11428 - starting-at-height-58447799: 10938 - starting-at-height-58710299: 10468 - starting-at-height-58972799: 10020 - starting-at-height-59235299: 9590 - starting-at-height-59497799: 9178 - starting-at-height-59760299: 8786 - starting-at-height-60022799: 8408 - starting-at-height-60285299: 8048 - starting-at-height-60547799: 7702 - starting-at-height-60810299: 7372 - starting-at-height-61072799: 7056 - starting-at-height-61335299: 6754 - starting-at-height-61597799: 6464 - starting-at-height-61860299: 6186 - starting-at-height-62122799: 5922 - starting-at-height-62385299: 5668 - starting-at-height-62647799: 5424 - starting-at-height-62910299: 5192 - starting-at-height-63172799: 4970 - starting-at-height-63435299: 4756 - starting-at-height-63697799: 4552 - starting-at-height-63960299: 4356 - starting-at-height-64222799: 4170 - starting-at-height-64485299: 3992 - starting-at-height-64747799: 3820 - starting-at-height-65010299: 3656 - starting-at-height-65272799: 3500 - starting-at-height-65535299: 3350 - starting-at-height-65797799: 3206 - starting-at-height-66060299: 3068 - starting-at-height-66322799: 2936 - starting-at-height-66585299: 2810 - starting-at-height-66847799: 2690 - starting-at-height-67110299: 2574 - starting-at-height-67372799: 2464 - starting-at-height-67635299: 2358 - starting-at-height-67897799: 2258 - starting-at-height-68160299: 2160 - starting-at-height-68422799: 2068 - starting-at-height-68685299: 1980 - starting-at-height-68947799: 1894 - starting-at-height-69210299: 1812 - starting-at-height-69472799: 1736 - starting-at-height-69735299: 1660 - starting-at-height-69997799: 1590 - starting-at-height-70260299: 1522 - starting-at-height-70522799: 1456 - starting-at-height-70785299: 1394 - starting-at-height-71047799: 1334 - starting-at-height-71310299: 1276 - starting-at-height-71572799: 1222 - starting-at-height-71835299: 1170 - starting-at-height-72097799: 1120 - starting-at-height-72360299: 1072 - starting-at-height-72622799: 1026 - starting-at-height-72885299: 982 - starting-at-height-73147799: 938 - starting-at-height-73410299: 898 - starting-at-height-73672799: 860 - starting-at-height-73935299: 824 - starting-at-height-74197799: 788 - starting-at-height-74460299: 754 - starting-at-height-74722799: 722 - starting-at-height-74985299: 690 - starting-at-height-75247799: 662 - starting-at-height-75510299: 632 - starting-at-height-75772799: 606 - starting-at-height-76035299: 580 - starting-at-height-76297799: 554 - starting-at-height-76560299: 530 - starting-at-height-76822799: 508 - starting-at-height-77085299: 486 - starting-at-height-77347799: 466 - starting-at-height-77610299: 446 - starting-at-height-77872799: 426 - starting-at-height-78135299: 408 - starting-at-height-78397799: 390 - starting-at-height-78660299: 374 - starting-at-height-78922799: 358 - starting-at-height-79185299: 342 - starting-at-height-79447799: 328 - starting-at-height-79710299: 314 - starting-at-height-79972799: 300 - starting-at-height-80235299: 286 - starting-at-height-80497799: 274 - starting-at-height-80760299: 262 - starting-at-height-81022799: 252 - starting-at-height-81285299: 240 - starting-at-height-81547799: 230 - starting-at-height-81810299: 220 - starting-at-height-82072799: 210 - starting-at-height-82335299: 202 - starting-at-height-82597799: 194 - starting-at-height-82860299: 184 - starting-at-height-83122799: 176 - starting-at-height-83385299: 170 - starting-at-height-83647799: 162 - starting-at-height-83910299: 154 - starting-at-height-84172799: 148 - starting-at-height-84435299: 142 - starting-at-height-84697799: 136 - starting-at-height-84960299: 130 - starting-at-height-85222799: 124 - starting-at-height-85485299: 118 - starting-at-height-85747799: 114 - starting-at-height-86010299: 108 - starting-at-height-86272799: 104 - starting-at-height-86535299: 100 - starting-at-height-86797799: 96 - starting-at-height-87060299: 92 - starting-at-height-87322799: 88 - starting-at-height-87585299: 84 - starting-at-height-87847799: 80 - starting-at-height-88110299: 76 - starting-at-height-88372799: 72 - starting-at-height-88635299: 70 - starting-at-height-88897799: 66 - starting-at-height-89160299: 64 - starting-at-height-89422799: 62 - starting-at-height-89685299: 58 - starting-at-height-89947799: 56 - starting-at-height-90210299: 54 - starting-at-height-90472799: 52 - starting-at-height-90735299: 48 - starting-at-height-90997799: 46 - starting-at-height-91260299: 44 - starting-at-height-91522799: 42 - starting-at-height-91785299: 40 - starting-at-height-92047799: 40 - starting-at-height-92310299: 38 - starting-at-height-92572799: 36 - starting-at-height-92835299: 34 - starting-at-height-93097799: 32 - starting-at-height-93360299: 32 - starting-at-height-93622799: 30 - starting-at-height-93885299: 28 - starting-at-height-94147799: 28 - starting-at-height-94410299: 26 - starting-at-height-94672799: 24 - starting-at-height-94935299: 24 - starting-at-height-95197799: 22 - starting-at-height-95460299: 22 - starting-at-height-95722799: 20 - starting-at-height-95985299: 20 - starting-at-height-96247799: 18 - starting-at-height-96510299: 18 - starting-at-height-96772799: 18 - starting-at-height-97035299: 16 - starting-at-height-97297799: 16 - starting-at-height-97560299: 14 - starting-at-height-97822799: 14 - starting-at-height-98085299: 14 - starting-at-height-98347799: 12 - starting-at-height-98610299: 12 - starting-at-height-98872799: 12 - starting-at-height-99135299: 12 - starting-at-height-99397799: 10 - starting-at-height-99660299: 10 - starting-at-height-99922799: 10 - starting-at-height-100185299: 10 - starting-at-height-100447799: 8 - starting-at-height-100710299: 8 - starting-at-height-100972799: 8 - starting-at-height-101235299: 8 - starting-at-height-101497799: 8 - starting-at-height-101760299: 6 - starting-at-height-102022799: 6 - starting-at-height-102285299: 6 - starting-at-height-102547799: 6 - starting-at-height-102810299: 6 - starting-at-height-103072799: 6 - starting-at-height-103335299: 6 - starting-at-height-103597799: 4 - starting-at-height-103860299: 4 - starting-at-height-104122799: 4 - starting-at-height-104385299: 4 - starting-at-height-104647799: 4 - starting-at-height-104910299: 4 - starting-at-height-105172799: 4 - starting-at-height-105435299: 4 - starting-at-height-105697799: 4 - starting-at-height-105960299: 2 - starting-at-height-106222799: 2 - starting-at-height-106485299: 2 - starting-at-height-106747799: 2 - starting-at-height-107010299: 2 - starting-at-height-107272799: 2 - starting-at-height-107535299: 2 - starting-at-height-107797799: 2 - starting-at-height-108060299: 2 - starting-at-height-108322799: 2 - starting-at-height-108585299: 2 - starting-at-height-108847799: 2 - starting-at-height-109110299: 2 - starting-at-height-109372799: 2 - starting-at-height-109635299: 2 - starting-at-height-109897799: 2 - starting-at-height-110160299: 1 - starting-at-height-110422799: 0 diff --git a/src/commands/clean.ts b/src/commands/clean.ts deleted file mode 100644 index eb6aa901b..000000000 --- a/src/commands/clean.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command } from '@oclif/command'; -import { BootstrapUtils, CommandUtils } from '../service'; - -export default class Clean extends Command { - static description = 'It removes the target folder deleting the generated configuration and data'; - - static examples = [`$ symbol-bootstrap clean`]; - - static flags = { - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, - }; - - public async run(): Promise { - const { flags } = this.parse(Clean); - BootstrapUtils.showBanner(); - BootstrapUtils.deleteFolder(flags.target); - } -} diff --git a/src/commands/compose.ts b/src/commands/compose.ts deleted file mode 100644 index 8f9b56e68..000000000 --- a/src/commands/compose.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command, flags } from '@oclif/command'; -import { BootstrapService, BootstrapUtils, CommandUtils, ComposeService } from '../service'; - -export default class Compose extends Command { - static description = 'It generates the `docker-compose.yml` file from the configured network.'; - - static examples = [`$ symbol-bootstrap compose`]; - - static flags = { - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, - password: CommandUtils.passwordFlag, - noPassword: CommandUtils.noPasswordFlag, - upgrade: flags.boolean({ - description: 'It regenerates the docker compose and utility files from the /docker folder', - default: ComposeService.defaultParams.upgrade, - }), - user: flags.string({ - char: 'u', - description: `User used to run the services in the docker-compose.yml file. "${BootstrapUtils.CURRENT_USER}" means the current user.`, - default: 'current', - }), - }; - - public async run(): Promise { - const { flags } = this.parse(Compose); - BootstrapUtils.showBanner(); - flags.password = await CommandUtils.resolvePassword( - flags.password, - flags.noPassword, - CommandUtils.passwordPromptDefaultMessage, - true, - ); - await new BootstrapService(this.config.root).compose(flags); - } -} diff --git a/src/commands/config.ts b/src/commands/config.ts deleted file mode 100644 index 5adc7e805..000000000 --- a/src/commands/config.ts +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command, flags } from '@oclif/command'; -import { BootstrapService, BootstrapUtils, CommandUtils, ConfigService, Preset } from '../service'; - -export default class Config extends Command { - static description = 'Command used to set up the configuration files and the nemesis block for the current network'; - - static examples = [ - `$ symbol-bootstrap config -p bootstrap`, - `$ symbol-bootstrap config -p testnet -a dual --password 1234`, - `$ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap config -p testnet -a dual`, - ]; - //@typescript-eslint/explicit-module-boundary-types - static resolveFlags = (required: boolean) => ({ - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, - password: CommandUtils.passwordFlag, - noPassword: CommandUtils.noPasswordFlag, - preset: flags.enum({ - char: 'p', - description: `The network preset, can be provided via custom preset or cli parameter. ${ - required ? '' : 'If not provided, the value is resolved from the target/preset.yml file.' - }`, - options: Object.keys(Preset).map((v) => v as Preset), - required: required, - }), - assembly: flags.string({ - char: 'a', - description: `The assembly, example "dual" for testnet. ${ - required ? '' : 'If not provided, the value is resolved from the target/preset.yml file.' - }`, - required: required, - }), - customPreset: flags.string({ - char: 'c', - description: `External preset file. Values in this file will override the provided presets`, - required: required, - }), - reset: flags.boolean({ - char: 'r', - description: 'It resets the configuration generating a new one', - default: ConfigService.defaultParams.reset, - }), - - upgrade: flags.boolean({ - description: `It regenerates the configuration reusing the previous keys. Use this flag when upgrading the version of bootstrap to keep your node up to date without dropping the local data. The original preset (-t), assembly (-a), and custom preset (-a) must be used. Backup the target folder before upgrading.`, - default: ConfigService.defaultParams.reset, - }), - - report: flags.boolean({ - description: 'It generates reStructuredText (.rst) reports describing the configuration of each node.', - default: ConfigService.defaultParams.report, - }), - - user: flags.string({ - char: 'u', - description: `User used to run docker images when creating configuration files like certificates or nemesis block. "${BootstrapUtils.CURRENT_USER}" means the current user.`, - default: BootstrapUtils.CURRENT_USER, - }), - }); - - static flags = Config.resolveFlags(false); - - public async run(): Promise { - const { flags } = this.parse(Config); - BootstrapUtils.showBanner(); - flags.password = await CommandUtils.resolvePassword( - flags.password, - flags.noPassword, - CommandUtils.passwordPromptDefaultMessage, - true, - ); - await new BootstrapService(this.config.root).config(flags); - } -} diff --git a/src/commands/enrollRewardProgram.ts b/src/commands/enrollRewardProgram.ts deleted file mode 100644 index 5ab82c5c7..000000000 --- a/src/commands/enrollRewardProgram.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command } from '@oclif/command'; -import { BootstrapService, BootstrapUtils } from '../service'; -import { AnnounceService } from '../service/AnnounceService'; -import { CommandUtils } from '../service/CommandUtils'; - -export default class EnrollRewardProgram extends Command { - static description = `It enrols the nodes in the rewards program by announcing the enroll transaction to the registration address. You can also use this command to update the program registration when you change the agent keys (changing the agent-ca-csr) or server host. - -Currently, the only program that can be enrolled post-launch is 'SuperNode'.`; - - static examples = [ - `$ symbol-bootstrap enrollRewardProgram`, - `$ symbol-bootstrap enrollRewardProgram --noPassword`, - `$ symbol-bootstrap enrollRewardProgram --useKnownRestGateways`, - `$ symbol-bootstrap enrollRewardProgram --password 1234 --url http://external-rest:3000`, - `$ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap enrollRewardProgram --url http://external-rest:3000`, - ]; - - static flags = { - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, - ...AnnounceService.flags, - }; - - public async run(): Promise { - const { flags } = this.parse(EnrollRewardProgram); - BootstrapUtils.showBanner(); - flags.password = await CommandUtils.resolvePassword( - flags.password, - flags.noPassword, - CommandUtils.passwordPromptDefaultMessage, - true, - ); - return new BootstrapService(this.config.root).enrollRewardProgram(flags); - } -} diff --git a/src/commands/healthCheck.ts b/src/commands/healthCheck.ts deleted file mode 100644 index dd3708be5..000000000 --- a/src/commands/healthCheck.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command } from '@oclif/command'; -import { BootstrapService, BootstrapUtils } from '../service'; -import { CommandUtils } from '../service/CommandUtils'; - -export default class HealthCheck extends Command { - static description = `It checks if the services created with docker compose are up and running. - -This command checks: -- Whether the docker containers are running. -- Whether the services' exposed ports are listening. -- Whether the rest gateways' /node/health are OK. - -The health check process handles 'repeat' and custom 'openPort' services. - `; - - static examples = [`$ symbol-bootstrap healthCheck`]; - - static flags = { - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, - }; - - public async run(): Promise { - const { flags } = this.parse(HealthCheck); - BootstrapUtils.showBanner(); - await new BootstrapService(this.config.root).healthCheck(flags); - } -} diff --git a/src/commands/link.ts b/src/commands/link.ts deleted file mode 100644 index 4174b2580..000000000 --- a/src/commands/link.ts +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command, flags } from '@oclif/command'; -import { BootstrapService, BootstrapUtils, LinkService } from '../service'; -import { AnnounceService } from '../service/AnnounceService'; -import { CommandUtils } from '../service/CommandUtils'; - -export default class Link extends Command { - static description = `It announces VRF and Voting Link transactions to the network for each node with 'Peer' or 'Voting' roles. This command finalizes the node registration to an existing network.`; - - static examples = [`$ symbol-bootstrap link`, `$ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap link --unlink --useKnownRestGateways`]; - - static flags = { - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, - unlink: flags.boolean({ - description: 'Perform "Unlink" transactions unlinking the voting and VRF keys from the node signer account', - default: LinkService.defaultParams.unlink, - }), - ...AnnounceService.flags, - }; - - public async run(): Promise { - const { flags } = this.parse(Link); - BootstrapUtils.showBanner(); - flags.password = await CommandUtils.resolvePassword( - flags.password, - flags.noPassword, - CommandUtils.passwordPromptDefaultMessage, - true, - ); - return new BootstrapService(this.config.root).link(flags); - } -} diff --git a/src/commands/pack.ts b/src/commands/pack.ts deleted file mode 100644 index 7a4b30901..000000000 --- a/src/commands/pack.ts +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2021 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command, flags } from '@oclif/command'; -import { existsSync } from 'fs'; -import { prompt } from 'inquirer'; -import { dirname, join } from 'path'; -import { BootstrapService, BootstrapUtils, CommandUtils, CryptoUtils, ZipItem, ZipUtils } from '../service'; -import Clean from './clean'; -import Compose from './compose'; -import Config from './config'; - -export default class Pack extends Command { - static description = 'It configures and packages your node into a zip file that can be uploaded to the final node machine.'; - - static examples = [ - `$ symbol-bootstrap pack`, - `$ symbol-bootstrap pack -p bootstrap -c custom-preset.yml`, - `$ symbol-bootstrap pack -p testnet -a dual -c custom-preset.yml`, - `$ symbol-bootstrap pack -p mainnet -a dual --password 1234 -c custom-preset.yml`, - `$ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap pack -p mainnet -a dual -c custom-preset.yml`, - ]; - - static flags = { - ...Compose.flags, - ...Clean.flags, - ...Config.resolveFlags(true), - ready: flags.boolean({ - description: 'If --ready is provided, the command will not ask offline confirmation.', - }), - }; - - public async run(): Promise { - const { flags } = this.parse(Pack); - BootstrapUtils.showBanner(); - const preset = flags.preset; - const assembly = flags.assembly; - const targetZip = join(dirname(flags.target), `${preset}-${assembly || 'default'}-node.zip`); - - if (existsSync(targetZip)) { - throw new Error( - `The target zip file ${targetZip} already exist. Do you want to delete it before repackaging your target folder?`, - ); - } - console.log(); - console.log(); - if ( - !flags.ready && - !( - await prompt([ - { - name: 'offlineNow', - message: `Symbol Bootstrap is about to start working with sensitive information (certificates and voting file generation) so it is highly recommended that you disconnect from the network before continuing. Say YES if you are offline or if you don't care.`, - type: 'confirm', - default: true, - }, - ]) - ).offlineNow - ) { - console.log('Come back when you are offline...'); - return; - } - - flags.password = await CommandUtils.resolvePassword( - flags.password, - flags.noPassword, - CommandUtils.passwordPromptDefaultMessage, - true, - ); - const service = await new BootstrapService(this.config.root); - const configOnlyCustomPresetFileName = 'config-only-custom-preset.yml'; - const configResult = await service.config(flags); - await service.compose(flags, configResult.presetData); - - const noPrivateKeyTempFile = 'custom-preset-temp.temp'; - - if (flags.customPreset) { - await BootstrapUtils.writeYaml( - noPrivateKeyTempFile, - CryptoUtils.removePrivateKeys(BootstrapUtils.loadYaml(flags.customPreset, flags.password)), - flags.password, - ); - } else { - await BootstrapUtils.writeYaml(noPrivateKeyTempFile, {}, flags.password); - } - const zipItems: ZipItem[] = [ - { - from: flags.target, - to: 'target', - directory: true, - }, - { - from: noPrivateKeyTempFile, - to: configOnlyCustomPresetFileName, - directory: false, - }, - ]; - - await ZipUtils.zip(targetZip, zipItems); - await BootstrapUtils.deleteFile(noPrivateKeyTempFile); - console.log(); - console.log(`Zip file ${targetZip} has been created. You can unzip it in your node's machine and run:`); - console.log(`$ symbol-bootstrap start -p ${preset}${assembly ? ` -a ${assembly}` : ''} -c ${configOnlyCustomPresetFileName}`); - } -} diff --git a/src/commands/report.ts b/src/commands/report.ts deleted file mode 100644 index b008c9e33..000000000 --- a/src/commands/report.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command } from '@oclif/command'; -import { BootstrapService, BootstrapUtils } from '../service'; -import { CommandUtils } from '../service/CommandUtils'; - -export default class Clean extends Command { - static description = 'it generates reStructuredText (.rst) reports describing the configuration of each node.'; - - static examples = [`$ symbol-bootstrap report`]; - - static flags = { - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, - }; - - public async run(): Promise { - const { flags } = this.parse(Clean); - BootstrapUtils.showBanner(); - await new BootstrapService(this.config.root).report(flags); - } -} diff --git a/src/commands/resetData.ts b/src/commands/resetData.ts deleted file mode 100644 index c981511a4..000000000 --- a/src/commands/resetData.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command } from '@oclif/command'; -import { BootstrapService, BootstrapUtils } from '../service'; -import { CommandUtils } from '../service/CommandUtils'; - -export default class ResetData extends Command { - static description = 'It removes the data keeping the generated configuration, certificates, keys and block 1.'; - - static examples = [`$ symbol-bootstrap resetData`]; - - static flags = { - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, - }; - - public async run(): Promise { - const { flags } = this.parse(ResetData); - BootstrapUtils.showBanner(); - await new BootstrapService(this.config.root).resetData(flags); - } -} diff --git a/src/commands/start.ts b/src/commands/start.ts deleted file mode 100644 index b45824676..000000000 --- a/src/commands/start.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command } from '@oclif/command'; -import { BootstrapService, BootstrapUtils } from '../service'; -import { CommandUtils } from '../service/CommandUtils'; -import Clean from './clean'; -import Compose from './compose'; -import Config from './config'; -import Run from './run'; - -export default class Start extends Command { - static description = 'Single command that aggregates config, compose and run in one line!'; - - static examples = [ - `$ symbol-bootstrap start`, - `$ symbol-bootstrap start -p bootstrap`, - `$ symbol-bootstrap start -p testnet -a dual`, - `$ symbol-bootstrap start -p testnet -a dual --password 1234`, - `$ echo "$MY_ENV_VAR_PASSWORD" | symbol-bootstrap start -p testnet -a dual`, - ]; - - static flags = { ...Compose.flags, ...Run.flags, ...Clean.flags, ...Config.flags }; - - public async run(): Promise { - const { flags } = this.parse(Start); - BootstrapUtils.showBanner(); - flags.password = await CommandUtils.resolvePassword( - flags.password, - flags.noPassword, - CommandUtils.passwordPromptDefaultMessage, - true, - ); - await new BootstrapService(this.config.root).start(flags); - } -} diff --git a/src/commands/stop.ts b/src/commands/stop.ts deleted file mode 100644 index 28b910967..000000000 --- a/src/commands/stop.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command } from '@oclif/command'; -import { BootstrapUtils, RunService } from '../service'; -import { CommandUtils } from '../service/CommandUtils'; - -export default class Stop extends Command { - static description = - 'It stops the docker-compose network if running (symbol-bootstrap started with --detached). This is just a wrapper for the `docker-compose down` bash call.'; - static examples = [`$ symbol-bootstrap stop`]; - - static flags = { - help: CommandUtils.helpFlag, - target: CommandUtils.targetFlag, - }; - - public run(): Promise { - const { flags } = this.parse(Stop); - BootstrapUtils.showBanner(); - return new RunService(flags).stop(); - } -} diff --git a/src/commands/verify.ts b/src/commands/verify.ts deleted file mode 100644 index 231d368d4..000000000 --- a/src/commands/verify.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Command } from '@oclif/command'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { BootstrapUtils, CommandUtils, VerifyService } from '../service'; -const logger: Logger = LoggerFactory.getLogger(LogType.System); - -export default class Verify extends Command { - static description = - 'It tests the installed software in the current computer reporting if there is any missing dependency, invalid version, or software related issue.'; - static examples = [`$ symbol-bootstrap verify`]; - - static flags = { - help: CommandUtils.helpFlag, - }; - - public async run(): Promise { - BootstrapUtils.showBanner(); - const report = await new VerifyService(this.config.root).createReport(); - logger.info(`OS: ${report.platform}`); - report.lines.forEach((line) => { - if (line.recommendation) { - logger.warn(`${line.header} - Warning! - ${line.message} - ${line.recommendation}`); - } else { - logger.info(`${line.header} - OK! - ${line.message}`); - } - }); - } -} diff --git a/src/logger/Logger.ts b/src/logger/Logger.ts deleted file mode 100644 index 189064d21..000000000 --- a/src/logger/Logger.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as winston from 'winston'; -type Logger = winston.Logger; -export default Logger; diff --git a/src/logger/LoggerFactory.ts b/src/logger/LoggerFactory.ts deleted file mode 100644 index 2d9cca75a..000000000 --- a/src/logger/LoggerFactory.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { resolve } from 'path'; -import * as winston from 'winston'; -import { FileTransportInstance } from 'winston/lib/winston/transports'; -import Logger from './Logger'; -import { LogType } from './LogType'; - -export default class LoggerFactory { - private static readonly consoleTransport = new winston.transports.Console({ - format: winston.format.combine( - winston.format.timestamp(), - winston.format.cli(), - winston.format.printf(LoggerFactory.logFormatTemplate), - ), - }); - - private static readonly fileTransport = (id: LogType): FileTransportInstance => - new winston.transports.File({ - format: winston.format.combine(winston.format.timestamp(), winston.format.printf(LoggerFactory.logFormatTemplate)), - options: { flags: 'w' }, - filename: resolve(LoggerFactory.getLogFileName(id)), - level: 'info', - }); - - public static getLogger(id = LogType.System): Logger { - if (!winston.loggers.has(id.toString())) { - winston.loggers.add(id.toString(), { - transports: [LoggerFactory.consoleTransport, LoggerFactory.fileTransport(id)], - format: winston.format.label({ label: id.toString() }), - }); - } - return winston.loggers.get(id.toString()); - } - - private static logFormatTemplate(i: { level: string; message: string; [key: string]: any }): string { - return `${i.timestamp} ${i.level} ${i.message}`; - } - - private static getLogFileName(id: LogType): string { - switch (id) { - case LogType.Audit: - return 'auditLogs.log'; - case LogType.System: - default: - return 'logs.log'; - } - } -} diff --git a/src/service/AnnounceService.ts b/src/service/AnnounceService.ts deleted file mode 100644 index 9af4c34cd..000000000 --- a/src/service/AnnounceService.ts +++ /dev/null @@ -1,490 +0,0 @@ -/* - * Copyright 2021 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { flags } from '@oclif/command'; -import { prompt } from 'inquirer'; -import { - Account, - AccountInfo, - Address, - AggregateTransaction, - Convert, - Deadline, - LockFundsTransaction, - MosaicId, - MultisigAccountInfo, - NetworkType, - PublicAccount, - RepositoryFactory, - SignedTransaction, - Transaction, - TransactionService, - UInt64, -} from 'symbol-sdk'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { Addresses, ConfigPreset, NodeAccount, NodePreset } from '../model'; -import { CommandUtils } from './CommandUtils'; -import { KeyName } from './ConfigService'; -import { RemoteNodeService } from './RemoteNodeService'; - -const logger: Logger = LoggerFactory.getLogger(LogType.System); - -export interface TransactionFactoryParams { - presetData: ConfigPreset; - nodePreset: NodePreset; - nodeAccount: NodeAccount; - mainAccountInfo: AccountInfo; - mainAccount: PublicAccount; - deadline: Deadline; - target: string; - maxFee: UInt64; - latestFinalizedBlockEpoch: number; -} - -export interface TransactionFactory { - createTransactions(params: TransactionFactoryParams): Promise; -} - -export class AnnounceService { - private static onProcessListener = () => { - process.on('SIGINT', () => { - process.exit(400); - }); - }; - public static flags = { - password: CommandUtils.passwordFlag, - noPassword: CommandUtils.noPasswordFlag, - url: flags.string({ - char: 'u', - description: 'the network url', - default: 'http://localhost:3000', - }), - useKnownRestGateways: flags.boolean({ - description: - 'Use the best NEM node available when announcing. Otherwise the command will use the node provided by the --url parameter.', - }), - ready: flags.boolean({ - description: 'If --ready is provided, the command will not ask for confirmation when announcing transactions.', - }), - maxFee: flags.integer({ - description: 'the max fee used when announcing (absolute). The node min multiplier will be used if it is not provided.', - }), - customPreset: flags.string({ - char: 'c', - description: `This command uses the encrypted addresses.yml to resolve the main private key. If the main private is only stored in the custom preset, you can provide it using this param. Otherwise, the command may ask for it when required.`, - required: false, - }), - }; - public async announce( - providedUrl: string, - providedMaxFee: number | undefined, - useKnownRestGateways: boolean, - ready: boolean | undefined, - target: string, - presetData: ConfigPreset, - addresses: Addresses, - transactionFactory: TransactionFactory, - tokenAmount = 'some', - ): Promise { - AnnounceService.onProcessListener(); - if (!presetData.nodes || !presetData.nodes?.length) { - logger.info(`There are no transactions to announce...`); - return; - } - const url = providedUrl.replace(/\/$/, ''); - const urls = (useKnownRestGateways && presetData.knownRestGateways) || [url]; - const repositoryInfo = await new RemoteNodeService().getBestRepositoryInfo(urls); - const repositoryFactory = repositoryInfo.repositoryFactory; - const networkType = await repositoryFactory.getNetworkType().toPromise(); - const transactionRepository = repositoryFactory.createTransactionRepository(); - const transactionService = new TransactionService(transactionRepository, repositoryFactory.createReceiptRepository()); - const epochAdjustment = await repositoryFactory.getEpochAdjustment().toPromise(); - const listener = repositoryFactory.createListener(); - await listener.open(); - const faucetUrl = presetData.faucetUrl; - const currency = (await repositoryFactory.getCurrencies().toPromise()).currency; - const currencyMosaicId = currency.mosaicId; - const deadline = Deadline.create(epochAdjustment); - const minFeeMultiplier = (await repositoryFactory.createNetworkRepository().getTransactionFees().toPromise()).minFeeMultiplier; - const latestFinalizedBlockEpoch = (await repositoryFactory.createChainRepository().getChainInfo().toPromise()).latestFinalizedBlock - .finalizationEpoch; - if (providedMaxFee) { - logger.info(`MaxFee is ${providedMaxFee / Math.pow(10, currency.divisibility)}`); - } else { - logger.info(`Node's minFeeMultiplier is ${minFeeMultiplier}`); - } - - const generationHash = await repositoryFactory.getGenerationHash().toPromise(); - if (generationHash?.toUpperCase() !== presetData.nemesisGenerationHashSeed?.toUpperCase()) { - throw new Error( - `You are connecting to the wrong network. Expected generation hash is ${presetData.nemesisGenerationHashSeed} but got ${generationHash}`, - ); - } - - for (const [index, nodeAccount] of (addresses.nodes || []).entries()) { - if (!nodeAccount || !nodeAccount.main) { - throw new Error('CA/Main account is required!'); - } - const nodePreset = (presetData.nodes || [])[index]; - const mainAccount = PublicAccount.createFromPublicKey(nodeAccount.main.publicKey, presetData.networkType); - const noFundsMessage = faucetUrl - ? `Does your node signing address have any network coin? Send ${tokenAmount} tokens to ${mainAccount.address.plain()} via ${faucetUrl}/?recipient=${mainAccount.address.plain()}` - : `Does your node signing address have any network coin? Send ${tokenAmount} tokens to ${mainAccount.address.plain()} .`; - const mainAccountInfo = await this.getAccountInfo(repositoryFactory, mainAccount.address); - - if (!mainAccountInfo) { - logger.error(`Node signing account ${mainAccount.address.plain()} is not valid. \n\n${noFundsMessage}`); - continue; - } - if (this.isAccountEmpty(mainAccountInfo, currencyMosaicId)) { - logger.error( - `Node signing account ${mainAccount.address.plain()} does not have enough currency. Mosaic id: ${currencyMosaicId}. \n\n${noFundsMessage}`, - ); - continue; - } - const defaultMaxFee = UInt64.fromUint(providedMaxFee || 0); - const multisigAccountInfo = await this.getMultisigAccount(repositoryFactory, mainAccount.address); - const params: TransactionFactoryParams = { - presetData, - nodePreset, - nodeAccount, - mainAccountInfo, - latestFinalizedBlockEpoch, - target, - mainAccount, - deadline, - maxFee: defaultMaxFee, - }; - const transactions = await transactionFactory.createTransactions(params); - if (!transactions.length) { - logger.info(`There are not transactions to announce for node ${nodeAccount.name}`); - continue; - } - - const getTransactionDescription = (transaction: Transaction, signedTransaction: SignedTransaction): string => { - return `${transaction.constructor.name} - Hash: ${signedTransaction.hash} - MaxFee ${ - transaction.maxFee.compact() / Math.pow(10, currency.divisibility) - }`; - }; - - const shouldAnnounce = async (transaction: Transaction, signedTransaction: SignedTransaction): Promise => { - const response: boolean = - ready || - ( - await prompt([ - { - name: 'value', - message: `Do you want to announce ${getTransactionDescription(transaction, signedTransaction)}?`, - type: 'confirm', - default: true, - }, - ]) - ).value; - if (!response) { - logger.info(`Ignoring transaction for node ${nodeAccount.name}`); - } - return response; - }; - - const resolveMainAccount = async (): Promise => { - const presetMainPrivateKey = (presetData.nodes || [])[index]?.mainPrivateKey; - if (presetMainPrivateKey) { - const account = Account.createFromPrivateKey(presetMainPrivateKey, networkType); - if (account.address.equals(mainAccount.address)) { - return account; - } - } - - return Account.createFromPrivateKey( - await CommandUtils.resolvePrivateKey( - networkType, - nodeAccount.main, - KeyName.Main, - nodeAccount.name, - 'signing a transaction', - ), - networkType, - ); - }; - - if (multisigAccountInfo) { - logger.info( - `The node's main account is a multig account with Address: ${ - multisigAccountInfo.minApproval - } min approval. Cosigners are: ${multisigAccountInfo.cosignatoryAddresses - .map((a) => a.plain()) - .join( - ', ', - )}. The tool will ask for the cosigners provide keys in order to announce the transactions. These private keys are not stored anywhere!`, - ); - const cosigners = await this.promptAccounts( - networkType, - multisigAccountInfo.cosignatoryAddresses, - multisigAccountInfo.minApproval, - ); - if (!cosigners.length) { - logger.info('No cosigner has been provided, ignoring!'); - continue; - } - const bestCosigner = await this.getBestCosigner(repositoryFactory, cosigners, currencyMosaicId); - if (!bestCosigner) { - logger.info(`There is no cosigner with enough tokens to announce!`); - continue; - } - logger.info(`Cosigner ${bestCosigner.address.plain()} is initializing the transactions.`); - if (cosigners.length >= multisigAccountInfo.minApproval) { - let aggregateTransaction = AggregateTransaction.createComplete( - deadline, - transactions.map((t) => t.toAggregate(mainAccount)), - networkType, - [], - defaultMaxFee, - ); - if (!providedMaxFee) { - aggregateTransaction = aggregateTransaction.setMaxFeeForAggregate(minFeeMultiplier, cosigners.length - 1); - } - const signedAggregateTransaction = bestCosigner.signTransactionWithCosignatories( - aggregateTransaction, - cosigners.filter((a) => a !== bestCosigner), - generationHash, - ); - if (!(await shouldAnnounce(aggregateTransaction, signedAggregateTransaction))) { - continue; - } - try { - logger.info(`Announcing ${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)}`); - await transactionService.announce(signedAggregateTransaction, listener).toPromise(); - logger.info(`${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)} has been confirmed`); - } catch (e) { - const message = - `Aggregate Complete Transaction ${signedAggregateTransaction.type} ${ - signedAggregateTransaction.hash - } - signer ${signedAggregateTransaction.getSignerAddress().plain()} failed!! ` + e.message; - logger.error(message); - } - } else { - let aggregateTransaction = AggregateTransaction.createBonded( - deadline, - transactions.map((t) => t.toAggregate(mainAccount)), - networkType, - [], - defaultMaxFee, - ); - if (!providedMaxFee) { - aggregateTransaction = aggregateTransaction.setMaxFeeForAggregate(minFeeMultiplier, cosigners.length - 1); - } - const signedAggregateTransaction = bestCosigner.signTransactionWithCosignatories( - aggregateTransaction, - cosigners.filter((a) => a !== bestCosigner), - generationHash, - ); - let lockFundsTransaction: Transaction = LockFundsTransaction.create( - deadline, - currency.createRelative(10), - UInt64.fromUint(1000), - signedAggregateTransaction, - networkType, - defaultMaxFee, - ); - if (!providedMaxFee) { - lockFundsTransaction = lockFundsTransaction.setMaxFee(minFeeMultiplier); - } - const signedLockFundsTransaction = bestCosigner.sign(lockFundsTransaction, generationHash); - if (!(await shouldAnnounce(lockFundsTransaction, signedLockFundsTransaction))) { - continue; - } - if (!(await shouldAnnounce(aggregateTransaction, signedAggregateTransaction))) { - continue; - } - - try { - logger.info(`Announcing ${getTransactionDescription(lockFundsTransaction, signedLockFundsTransaction)}`); - await transactionService.announce(signedLockFundsTransaction, listener).toPromise(); - logger.info(`${getTransactionDescription(lockFundsTransaction, signedLockFundsTransaction)} has been confirmed`); - - logger.info(`Announcing Bonded ${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)}`); - await transactionService.announceAggregateBonded(signedAggregateTransaction, listener).toPromise(); - logger.info(`${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)} has been announced`); - - logger.info('Aggregate Bonded Transaction has been confirmed! Your cosigners would need to cosign!'); - } catch (e) { - const message = - `Aggregate Bonded Transaction ${signedAggregateTransaction.type} ${ - signedAggregateTransaction.hash - } - signer ${signedAggregateTransaction.getSignerAddress().plain()} failed!! ` + e.message; - logger.error(message); - } - } - } else { - const signerAccount = await resolveMainAccount(); - if (transactions.length == 1) { - let transaction = transactions[0]; - if (!providedMaxFee) { - transaction = transaction.setMaxFee(minFeeMultiplier); - } - const signedTransaction = signerAccount.sign(transactions[0], generationHash); - if (!(await shouldAnnounce(transaction, signedTransaction))) { - continue; - } - try { - logger.info(`Announcing ${getTransactionDescription(transaction, signedTransaction)}`); - await transactionService.announce(signedTransaction, listener).toPromise(); - logger.info(`${getTransactionDescription(transaction, signedTransaction)} has been confirmed`); - } catch (e) { - const message = - `Simple Transaction ${signedTransaction.type} ${ - signedTransaction.hash - } - signer ${signedTransaction.getSignerAddress().plain()} failed!! ` + e.message; - logger.error(message); - } - } else { - let aggregateTransaction = AggregateTransaction.createComplete( - deadline, - transactions.map((t) => t.toAggregate(mainAccount)), - networkType, - [], - defaultMaxFee, - ); - if (!providedMaxFee) { - aggregateTransaction = aggregateTransaction.setMaxFeeForAggregate(minFeeMultiplier, 0); - } - const signedAggregateTransaction = signerAccount.sign(aggregateTransaction, generationHash); - if (!(await shouldAnnounce(aggregateTransaction, signedAggregateTransaction))) { - continue; - } - try { - logger.info(`Announcing ${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)}`); - await transactionService.announce(signedAggregateTransaction, listener).toPromise(); - logger.info(`${getTransactionDescription(aggregateTransaction, signedAggregateTransaction)} has been confirmed`); - } catch (e) { - const message = - `Aggregate Complete Transaction ${signedAggregateTransaction.type} ${ - signedAggregateTransaction.hash - } - signer ${signedAggregateTransaction.getSignerAddress().plain()} failed!! ` + e.message; - logger.error(message); - } - } - } - } - - listener.close(); - } - - private async promptAccounts(networkType: NetworkType, expectedAddresses: Address[], minApproval: number): Promise { - const providedAccounts: Account[] = []; - const allowedAddresses = [...expectedAddresses]; - while (true) { - console.log(); - const expectedDescription = allowedAddresses.map((address) => address.plain()).join(', '); - const responses = await prompt([ - { - name: 'privateKey', - message: `Enter the 64 HEX private key of one of the addresses ${expectedDescription}. Already entered ${providedAccounts.length} out of ${minApproval} required cosigners.`, - type: 'password', - validate: AnnounceService.isValidPrivateKey, - }, - ]); - const privateKey = responses.privateKey; - if (!privateKey) { - console.log('Please provide the private key....'); - } else { - const account = Account.createFromPrivateKey(privateKey, networkType); - const expectedAddress = allowedAddresses.find((address) => address.equals(account.address)); - if (!expectedAddress) { - console.log(); - console.log( - `Invalid private key. The entered private key has this ${account.address.plain()} address and it's not one of ${expectedDescription}. \n`, - ); - console.log(`Please re enter private key...`); - } else { - allowedAddresses.splice(allowedAddresses.indexOf(expectedAddress), 1); - providedAccounts.push(account); - if (!allowedAddresses.length) { - console.log('All cosigners have been entered.'); - return providedAccounts; - } - if (providedAccounts.length == minApproval) { - console.log(`Min Approval of ${minApproval} has been reached. Aggregate Complete transaction can be created.`); - return providedAccounts; - } - const responses = await prompt([ - { - name: 'more', - message: `Do you want to enter more cosigners?`, - type: 'confirm', - default: providedAccounts.length < minApproval, - }, - ]); - if (!responses.more) { - return providedAccounts; - } else { - console.log('Please provide an additional private key....'); - } - } - } - } - } - - public static isValidPrivateKey(input: string): boolean | string { - return Convert.isHexString(input, 64) ? true : 'Invalid private key. It must be has 64 hex characters!'; - } - - private async getAccountInfo(repositoryFactory: RepositoryFactory, mainAccountAddress: Address): Promise { - try { - return await repositoryFactory.createAccountRepository().getAccountInfo(mainAccountAddress).toPromise(); - } catch (e) { - return undefined; - } - } - - private async getMultisigAccount( - repositoryFactory: RepositoryFactory, - mainAccountAddress: Address, - ): Promise { - try { - const info = await repositoryFactory.createMultisigRepository().getMultisigAccountInfo(mainAccountAddress).toPromise(); - return info.isMultisig() ? info : undefined; - } catch (e) { - return undefined; - } - } - - private async getBestCosigner( - repositoryFactory: RepositoryFactory, - cosigners: Account[], - currencyMosaicId: MosaicId | undefined, - ): Promise { - const accountRepository = repositoryFactory.createAccountRepository(); - for (const cosigner of cosigners) { - try { - const accountInfo = await accountRepository.getAccountInfo(cosigner.address).toPromise(); - if (!this.isAccountEmpty(accountInfo, currencyMosaicId)) { - return cosigner; - } - } catch (e) {} - } - return undefined; - } - - private isAccountEmpty(mainAccountInfo: AccountInfo, currencyMosaicId: MosaicId | undefined): boolean { - if (!currencyMosaicId) { - throw new Error('Mosaic Id must not be null!'); - } - const mosaic = mainAccountInfo.mosaics.find((m) => m.id.equals(currencyMosaicId)); - return !mosaic || mosaic.amount.compare(UInt64.fromUint(0)) < 1; - } -} diff --git a/src/service/BootstrapService.ts b/src/service/BootstrapService.ts deleted file mode 100644 index 35e13e2ea..000000000 --- a/src/service/BootstrapService.ts +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Addresses, ConfigPreset, DockerCompose } from '../model'; -import { BootstrapUtils } from './BootstrapUtils'; -import { ComposeParams, ComposeService } from './ComposeService'; -import { ConfigParams, ConfigResult, ConfigService } from './ConfigService'; -import { LinkParams, LinkService } from './LinkService'; -import { ReportParams, ReportService } from './ReportService'; -import { RewardProgramParams, RewardProgramService } from './RewardProgramService'; -import { RunParams, RunService } from './RunService'; - -export type StartParams = ConfigParams & ComposeParams & RunParams; - -/** - * Main entry point for API integration. - */ -export class BootstrapService { - public constructor(private readonly root: string = BootstrapUtils.DEFAULT_ROOT_FOLDER) {} - - /** - * It generates the configuration and nemesis for the provided preset - * - * @param config the params of the config command. - */ - public async config(config: ConfigParams = ConfigService.defaultParams): Promise { - return new ConfigService(this.root, config).run(); - } - - /** - * It resolves the preset used for preventive configuration. - * - * @param config the params of the config command. - */ - public resolveConfigPreset(config: ConfigParams = ConfigService.defaultParams): ConfigPreset { - return new ConfigService(this.root, config).resolveConfigPreset(false); - } - - /** - * It generates the docker-compose.yaml file from the previously generated configuration. - * - * The config method/command needs to be called before this method - * - * @param config the params of the compose command. - * @param passedPresetData the created preset if you know it, otherwise will load the latest one resolved from the target folder. - * @param passedAddresses the created addresses if you know if, otherwise will load the latest one resolved form the target folder. - */ - public compose( - config: ComposeParams = ComposeService.defaultParams, - passedPresetData?: ConfigPreset, - passedAddresses?: Addresses, - ): Promise { - return new ComposeService(this.root, config).run(passedPresetData, passedAddresses); - } - - /** - * It calls a running server announcing all the node transactions like VRF and Voting. - * - * This command is useful to link the nodes keys to an existing running network like testnet. - * - * @param config the params passed - * @param passedPresetData the created preset if you know it, otherwise will load the latest one resolved from the target folder. - * @param passedAddresses the created addresses if you know it, otherwise will load the latest one resolved from the target folder. - */ - - public async link( - config: LinkParams = LinkService.defaultParams, - passedPresetData?: ConfigPreset | undefined, - passedAddresses?: Addresses | undefined, - ): Promise { - await new LinkService(config).run(passedPresetData, passedAddresses); - } - - /** - * It calls a running service announcing the registration of the nodes to the supernode rewards program. - * - * @param config the params passed - * @param passedPresetData the created preset if you know it, otherwise will load the latest one resolved from the target folder. - * @param passedAddresses the created addresses if you know it, otherwise will load the latest one resolved from the target folder. - */ - public async enrollRewardProgram( - config: RewardProgramParams = RewardProgramService.defaultParams, - passedPresetData?: ConfigPreset | undefined, - passedAddresses?: Addresses | undefined, - ): Promise { - await new RewardProgramService(config).enroll(passedPresetData, passedAddresses); - } - - /** - * It generates reStructuredText (.rst) reports describing the configuration of each node. - * - * The config method/command needs to be called before this method - * - * @param config the params of the report command. - * @param passedPresetData the created preset if you know if, otherwise will load the latest one resolved from the target folder. - * @return the paths of the created reports. - */ - public async report(config: ReportParams = ReportService.defaultParams, passedPresetData?: ConfigPreset): Promise { - return await new ReportService(this.root, config).run(passedPresetData); - } - - /** - * It boots the network via docker using the generated docker-compose.yml file and configuration - * - * The config and compose methods/commands need to be called before this method. - * - * This is just a wrapper for docker-compose up bash call. - * - * @param config the params of the run command. - */ - public async run(config: RunParams = RunService.defaultParams): Promise { - await new RunService(config).run(); - } - - /** - * It resets the data keeping generated configuration, block 1, certificates and keys. - * - * @param config the params of the clean command. - */ - public async resetData(config = { target: RunService.defaultParams.target }): Promise { - await new RunService(config).resetData(); - } - - /** - * It checks if the health of the running services is ok. - * - * @param config the params of the clean command. - */ - public async healthCheck(config = { target: RunService.defaultParams.target }): Promise { - await new RunService(config).healthCheck(); - } - - /** - * This method aggregates config, compose and run all in one. - * - * @param config the aggregated params in order to run all the sub commands. - */ - public async start(config: StartParams): Promise { - const configResult = await this.config(config); - await this.compose(config, configResult.presetData); - await this.run(config); - return configResult; - } - - /** - * It stops the docker-compose network if running. - * - * This is just a wrapper for docker-compose down bash call. - * - * @param config the params necessary to detect and stop the network. - */ - public async stop(config: RunParams = RunService.defaultParams): Promise { - await new RunService(config).stop(); - } -} diff --git a/src/service/CommandUtils.ts b/src/service/CommandUtils.ts deleted file mode 100644 index f1567a2a6..000000000 --- a/src/service/CommandUtils.ts +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright 2021 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { flags } from '@oclif/command'; -import { IOptionFlag } from '@oclif/command/lib/flags'; -import { prompt } from 'inquirer'; -import { Account, Convert, NetworkType, PublicAccount } from 'symbol-sdk'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { CertificatePair } from '../model'; -import { BootstrapUtils } from './BootstrapUtils'; -import { KeyName } from './ConfigService'; -const logger: Logger = LoggerFactory.getLogger(LogType.System); - -export class CommandUtils { - public static passwordPromptDefaultMessage = `Enter the password used to encrypt and decrypt custom presets, addresses.yml, and preset.yml files. When providing a password, private keys will be encrypted. Keep this password in a secure place!`; - public static helpFlag = flags.help({ char: 'h', description: 'It shows the help of this command.' }); - - public static targetFlag = flags.string({ - char: 't', - description: 'The target folder where the symbol-bootstrap network is generated', - default: BootstrapUtils.defaultTargetFolder, - }); - - public static passwordFlag = CommandUtils.getPasswordFlag( - `A password used to encrypt and decrypt private keys in preset files like addresses.yml and preset.yml. Bootstrap prompts for a password by default, can be provided in the command line (--password=XXXX) or disabled in the command line (--noPassword).`, - ); - - public static noPasswordFlag = flags.boolean({ - description: 'When provided, Bootstrap will not use a password, so private keys will be stored in plain text. Use with caution.', - default: false, - }); - - public static getPasswordFlag(description: string): IOptionFlag { - return flags.string({ - description: description, - parse(input: string): string { - const result = !input || CommandUtils.isValidPassword(input); - if (result === true) return input; - throw new Error(`--password is invalid, ${result}`); - }, - }); - } - - public static isValidPassword(input: string | undefined): boolean | string { - if (!input || input === '') { - return true; - } - if (input.length >= 4) return true; - return `Password must have at least 4 characters but got ${input.length}`; - } - - public static isValidPrivateKey(input: string): boolean | string { - return Convert.isHexString(input, 64) ? true : 'Invalid private key. It must have 64 hex characters.'; - } - - public static async resolvePrivateKey( - networkType: NetworkType, - account: CertificatePair | undefined, - keyName: KeyName, - nodeName: string, - operationDescription: string, - ): Promise { - if (!account) { - return ''; - } - if (!account.privateKey) { - while (true) { - console.log(); - console.log(`${keyName} private key is required when ${operationDescription}.`); - const address = PublicAccount.createFromPublicKey(account.publicKey, networkType).address.plain(); - const nodeDescription = nodeName === '' ? `of` : `of the Node's '${nodeName}'`; - const responses = await prompt([ - { - name: 'value', - message: `Enter the 64 HEX private key ${nodeDescription} ${keyName} account with Address: ${address} and Public Key: ${account.publicKey}:`, - type: 'password', - mask: '*', - validate: CommandUtils.isValidPrivateKey, - }, - ]); - const privateKey = responses.value === '' ? undefined : responses.value.toUpperCase(); - if (!privateKey) { - console.log('Please provide the private key.'); - } else { - const enteredAccount = Account.createFromPrivateKey(privateKey, networkType); - if (enteredAccount.publicKey.toUpperCase() !== account.publicKey.toUpperCase()) { - console.log( - `Invalid private key. Expected address is ${address} but you provided the private key for address ${enteredAccount.address.plain()}.\n`, - ); - console.log(`Please re-enter private key.`); - } else { - account.privateKey = privateKey; - return privateKey; - } - } - } - } - return account.privateKey.toUpperCase(); - } - - public static async resolvePassword( - providedPassword: string | undefined, - noPassword: boolean, - message: string, - log: boolean, - ): Promise { - if (!providedPassword) { - if (noPassword) { - if (log) logger.warn(`Password has not been provided (--noPassword)! It's recommended to use one for security!`); - return undefined; - } - const responses = await prompt([ - { - name: 'password', - mask: '*', - message: message, - type: 'password', - validate: CommandUtils.isValidPassword, - }, - ]); - if (responses.password === '' || !responses.password) { - if (log) logger.warn(`Password has not been provided (empty text)! It's recommended to use one for security!`); - return undefined; - } - if (log) logger.info(`Password has been provided`); - return responses.password; - } - if (log) logger.info(`Password has been provided`); - return providedPassword; - } -} diff --git a/src/service/ConfigLoader.ts b/src/service/ConfigLoader.ts deleted file mode 100644 index ab679df3e..000000000 --- a/src/service/ConfigLoader.ts +++ /dev/null @@ -1,647 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { existsSync } from 'fs'; -import * as _ from 'lodash'; -import { join } from 'path'; -import { Account, Address, Convert, Crypto, MosaicId, MosaicNonce, NetworkType, PublicAccount } from 'symbol-sdk'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { - Addresses, - ConfigAccount, - ConfigPreset, - CustomPreset, - DeepPartial, - MosaicAccounts, - NodeAccount, - NodePreset, - PrivateKeySecurityMode, -} from '../model'; -import { BootstrapUtils, KnownError, Migration, Password } from './BootstrapUtils'; -import { CommandUtils } from './CommandUtils'; -import { KeyName, Preset } from './ConfigService'; -import { CryptoUtils } from './CryptoUtils'; - -const logger: Logger = LoggerFactory.getLogger(LogType.System); - -export class ConfigLoader { - public static presetInfoLogged = false; - - public async generateRandomConfiguration(oldAddresses: Addresses | undefined, presetData: ConfigPreset): Promise { - const networkType = presetData.networkType; - const addresses: Addresses = { - version: this.getAddressesMigration(presetData.networkType).length + 1, - networkType: networkType, - nemesisGenerationHashSeed: - presetData.nemesisGenerationHashSeed || - oldAddresses?.nemesisGenerationHashSeed || - Convert.uint8ToHex(Crypto.randomBytes(32)), - sinkAddress: presetData.sinkAddress || oldAddresses?.sinkAddress || Account.generateNewAccount(networkType).address.plain(), - }; - - if (presetData.nodes) { - addresses.nodes = await this.generateNodeAccounts(oldAddresses, presetData, networkType); - } - - if (!presetData.harvestNetworkFeeSinkAddress) { - presetData.harvestNetworkFeeSinkAddress = addresses.sinkAddress; - } - if (!presetData.mosaicRentalFeeSinkAddress) { - presetData.mosaicRentalFeeSinkAddress = addresses.sinkAddress; - } - if (!presetData.namespaceRentalFeeSinkAddress) { - presetData.namespaceRentalFeeSinkAddress = addresses.sinkAddress; - } - - presetData.networkIdentifier = BootstrapUtils.getNetworkIdentifier(presetData.networkType); - presetData.networkName = BootstrapUtils.getNetworkName(presetData.networkType); - if (!presetData.nemesisGenerationHashSeed) { - presetData.nemesisGenerationHashSeed = addresses.nemesisGenerationHashSeed; - } - const privateKeySecurityMode = CryptoUtils.getPrivateKeySecurityMode(presetData.privateKeySecurityMode); - if (presetData.nemesis) { - addresses.nemesisSigner = this.generateAccount( - networkType, - privateKeySecurityMode, - KeyName.NemesisSigner, - oldAddresses?.nemesisSigner, - presetData.nemesis.nemesisSignerPrivateKey, - presetData.nemesisSignerPublicKey, - ); - presetData.nemesisSignerPublicKey = addresses.nemesisSigner.publicKey; - presetData.nemesis.nemesisSignerPrivateKey = await CommandUtils.resolvePrivateKey( - presetData.networkType, - addresses.nemesisSigner, - KeyName.NemesisSigner, - '', - 'creating the network nemesis seed and configuration', - ); - } - - const nemesisSignerAddress = Address.createFromPublicKey(presetData.nemesisSignerPublicKey, networkType); - - if (!presetData.currencyMosaicId) - presetData.currencyMosaicId = BootstrapUtils.toHex( - MosaicId.createFromNonce(MosaicNonce.createFromNumber(0), nemesisSignerAddress).toHex(), - ); - if (!presetData.harvestingMosaicId) { - if (!presetData.nemesis) { - throw new Error('nemesis must be defined!'); - } - if (presetData.nemesis.mosaics && presetData.nemesis.mosaics.length > 1) { - presetData.harvestingMosaicId = BootstrapUtils.toHex( - MosaicId.createFromNonce(MosaicNonce.createFromNumber(1), nemesisSignerAddress).toHex(), - ); - } else { - presetData.harvestingMosaicId = presetData.currencyMosaicId; - } - } - - if (presetData.nemesis) { - if (oldAddresses) { - // Nemesis configuration cannot be changed on upgrade. - addresses.mosaics = oldAddresses.mosaics; - } else { - if (presetData.nemesis.mosaics) { - const mosaics: MosaicAccounts[] = []; - presetData.nemesis.mosaics.forEach((m, index) => { - const accounts = this.generateAddresses(networkType, privateKeySecurityMode, m.accounts); - mosaics.push({ - id: index ? presetData.currencyMosaicId : presetData.harvestingMosaicId, - name: m.name, - type: index ? 'harvest' : 'currency', - accounts, - }); - }); - - presetData.nemesis.mosaics.forEach((m, index) => { - const accounts = mosaics[index].accounts; - if (!m.currencyDistributions) { - const nodeMainAccounts = (addresses.nodes || []).filter((node) => node.main); - const totalAccounts = (m.accounts || 0) + nodeMainAccounts.length; - const amountPerAccount = Math.floor(m.supply / totalAccounts); - m.currencyDistributions = [ - ...accounts.map((a) => ({ address: a.address, amount: amountPerAccount })), - ...nodeMainAccounts.map((n) => ({ address: n.main!.address, amount: amountPerAccount })), - ]; - if (m.currencyDistributions.length) - m.currencyDistributions[0].amount += m.supply - totalAccounts * amountPerAccount; - } - const supplied = m.currencyDistributions.map((d) => d.amount).reduce((a, b) => a + b, 0); - if (m.supply != supplied) { - throw new Error(`Invalid nemgen total supplied value, expected ${m.supply} but total is ${supplied}`); - } - }); - addresses.mosaics = mosaics; - } - } - } - - return addresses; - } - - public generateAddresses(networkType: NetworkType, privateKeySecurityMode: PrivateKeySecurityMode, size: number): ConfigAccount[] { - return ConfigLoader.getArray(size).map(() => - this.generateAccount(networkType, privateKeySecurityMode, KeyName.NemesisAccount, undefined, undefined, undefined), - ); - } - - public getAccount( - networkType: NetworkType, - publicKey: string | undefined, - privateKey: string | undefined, - ): PublicAccount | Account | undefined { - if (privateKey) { - return Account.createFromPrivateKey(privateKey, networkType); - } - if (publicKey) { - return PublicAccount.createFromPublicKey(publicKey, networkType); - } - return undefined; - } - - public toConfig(account: PublicAccount | Account): ConfigAccount { - if (account instanceof Account) { - return { - privateKey: account.privateKey, - publicKey: account.publicKey, - address: account.address.plain(), - }; - } - return { - publicKey: account.publicKey, - address: account.address.plain(), - }; - } - - public generateAccount( - networkType: NetworkType, - privateKeySecurityMode: PrivateKeySecurityMode, - keyName: KeyName, - oldStoredAccount: ConfigAccount | undefined, - privateKey: string | undefined, - publicKey: string | undefined, - ): ConfigAccount { - const oldAccount = this.getAccount( - networkType, - oldStoredAccount?.publicKey.toUpperCase(), - oldStoredAccount?.privateKey?.toUpperCase(), - ); - const newAccount = this.getAccount(networkType, publicKey?.toUpperCase(), privateKey?.toUpperCase()); - - const getAccountLog = (account: Account | PublicAccount) => - `${keyName} Account ${account.address.plain()} Public Ley ${account.publicKey} `; - - if (oldAccount && !newAccount) { - logger.info(`Reusing ${getAccountLog(oldAccount)}...`); - return this.toConfig(oldAccount); - } - if (!oldAccount && newAccount) { - logger.info(`${getAccountLog(newAccount)} has been provided`); - return this.toConfig(newAccount); - } - if (oldAccount && newAccount) { - if (oldAccount.address.equals(newAccount.address)) { - logger.info(`Reusing ${getAccountLog(newAccount)}`); - return { ...this.toConfig(oldAccount), ...this.toConfig(newAccount) }; - } - logger.info(`Old ${getAccountLog(oldAccount)} has been changed. New ${getAccountLog(newAccount)} replaces it.`); - return this.toConfig(newAccount); - } - - //Generation validation. - if ( - keyName === KeyName.Main && - (privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_ALL || - privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT || - privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_MAIN) - ) { - throw new KnownError( - `Account ${keyName} cannot be generated when Private Key Security Mode is ${privateKeySecurityMode}. Account won't be stored anywhere!. Please use ${PrivateKeySecurityMode.ENCRYPT}, or provider your ${keyName} account with custom presets!`, - ); - } - if ( - keyName === KeyName.Transport && - (privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_ALL || - privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT) - ) { - throw new KnownError( - `Account ${keyName} cannot be generated when Private Key Security Mode is ${privateKeySecurityMode}. Account won't be stored anywhere!. Please use ${PrivateKeySecurityMode.ENCRYPT}, ${PrivateKeySecurityMode.PROMPT_MAIN}, or provider your ${keyName} account with custom presets!`, - ); - } else { - if (privateKeySecurityMode === PrivateKeySecurityMode.PROMPT_ALL) { - throw new KnownError( - `Account ${keyName} cannot be generated when Private Key Security Mode is ${privateKeySecurityMode}. Account won't be stored anywhere! Please use ${PrivateKeySecurityMode.ENCRYPT}, ${PrivateKeySecurityMode.PROMPT_MAIN}, ${PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT}, or provider your ${keyName} account with custom presets!`, - ); - } - } - logger.info(`Generating ${keyName} account...`); - return ConfigLoader.toConfig(Account.generateNewAccount(networkType)); - } - - public generateNodeAccount( - oldNodeAccount: NodeAccount | undefined, - presetData: ConfigPreset, - index: number, - nodePreset: NodePreset, - networkType: NetworkType, - ): NodeAccount { - const privateKeySecurityMode = CryptoUtils.getPrivateKeySecurityMode(presetData.privateKeySecurityMode); - const name = nodePreset.name || `node-${index}`; - const main = this.generateAccount( - networkType, - privateKeySecurityMode, - KeyName.Main, - oldNodeAccount?.main, - nodePreset.mainPrivateKey, - nodePreset.mainPublicKey, - ); - const transport = this.generateAccount( - networkType, - privateKeySecurityMode, - KeyName.Transport, - oldNodeAccount?.transport, - nodePreset.transportPrivateKey, - nodePreset.transportPublicKey, - ); - - const friendlyName = nodePreset.friendlyName || main.publicKey.substr(0, 7); - - const nodeAccount: NodeAccount = { - name, - friendlyName, - roles: ConfigLoader.resolveRoles(nodePreset), - main: main, - transport: transport, - }; - - const useRemoteAccount = nodePreset.nodeUseRemoteAccount || presetData.nodeUseRemoteAccount; - - if (useRemoteAccount && (nodePreset.harvesting || nodePreset.voting)) - nodeAccount.remote = this.generateAccount( - networkType, - privateKeySecurityMode, - KeyName.Remote, - oldNodeAccount?.remote, - nodePreset.remotePrivateKey, - nodePreset.remotePublicKey, - ); - if (nodePreset.harvesting) - nodeAccount.vrf = this.generateAccount( - networkType, - privateKeySecurityMode, - KeyName.VRF, - oldNodeAccount?.vrf, - nodePreset.vrfPrivateKey, - nodePreset.vrfPublicKey, - ); - if (nodePreset.rewardProgram) - nodeAccount.agent = this.generateAccount( - networkType, - privateKeySecurityMode, - KeyName.Agent, - oldNodeAccount?.agent, - nodePreset.agentPrivateKey, - nodePreset.agentPublicKey, - ); - return nodeAccount; - } - - public async generateNodeAccounts( - oldAddresses: Addresses | undefined, - presetData: ConfigPreset, - networkType: NetworkType, - ): Promise { - return Promise.all( - presetData.nodes!.map((node, index) => - this.generateNodeAccount(oldAddresses?.nodes?.[index], presetData, index, node, networkType), - ), - ); - } - - private static getArray(size: number): number[] { - return [...Array(size).keys()]; - } - - public loadCustomPreset(customPreset: string | undefined, password: Password): CustomPreset { - if (!customPreset) { - return {}; - } - if (!existsSync(customPreset)) { - throw new KnownError( - `Custom preset '${customPreset}' doesn't exist. Have you provided the right --customPreset ?`, - ); - } - return BootstrapUtils.loadYaml(customPreset, password); - } - - private loadAssembly(root: string, preset: Preset, assembly: string | undefined): CustomPreset { - if (!assembly) { - return {}; - } - const fileLocation = `${root}/presets/${preset}/assembly-${assembly}.yml`; - if (!existsSync(fileLocation)) { - throw new KnownError( - `Assembly '${assembly}' is not valid for preset '${preset}'. Have you provided the right --preset --assembly ?`, - ); - } - return BootstrapUtils.loadYaml(fileLocation, false); - } - - public mergePresets(object: ConfigPreset, ...otherArgs: (CustomPreset | undefined)[]): any { - const presets: (CustomPreset | undefined)[] = [object, ...otherArgs]; - const inflation: Record = presets.reverse().find((p) => p?.inflation)?.inflation || {}; - const presetData = _.merge(object, ...otherArgs); - presetData.inflation = inflation; - return presetData; - } - - public createPresetData(params: { - password: Password; - root: string; - preset?: Preset; - assembly?: string; - customPreset?: string; - customPresetObject?: CustomPreset; - oldPresetData?: ConfigPreset; - }): ConfigPreset { - const customPreset = params.customPreset; - const customPresetObject = params.customPresetObject; - const oldPresetData = params.oldPresetData; - const customPresetFileObject = this.loadCustomPreset(customPreset, params.password); - const preset = - params.preset || - params.customPresetObject?.preset || - customPresetFileObject?.preset || - oldPresetData?.preset || - Preset.bootstrap; - - const assembly = - params.assembly || params.customPresetObject?.assembly || customPresetFileObject?.assembly || params.oldPresetData?.assembly; - - const root = params.root; - const sharedPreset = BootstrapUtils.loadYaml(join(root, 'presets', 'shared.yml'), false); - const networkPreset = BootstrapUtils.loadYaml(`${root}/presets/${preset}/network.yml`, false); - const assemblyPreset = this.loadAssembly(root, preset, assembly); - - const presetData = this.mergePresets(sharedPreset, networkPreset, assemblyPreset, customPresetFileObject, customPresetObject, { - preset, - }); - - if (presetData.assemblies && !assembly) { - throw new Error(`Preset ${preset} requires assembly (-a, --assembly option). Possible values are: ${presetData.assemblies}`); - } - if (!ConfigLoader.presetInfoLogged) { - logger.info(`Generating config from preset '${preset}'`); - if (assembly) { - logger.info(`Using assembly '${assembly}'`); - } - if (customPreset) { - logger.info(`Using custom preset file '${customPreset}'`); - } - } - ConfigLoader.presetInfoLogged = true; - const presetDataWithDynamicDefaults = { - version: 1, - preset: preset, - assembly: assembly || '', - ...presetData, - nodes: this.dynamicDefaultNodeConfiguration(presetData.nodes), - }; - return _.merge(oldPresetData || {}, this.expandRepeat(presetDataWithDynamicDefaults)); - } - - public dynamicDefaultNodeConfiguration(nodes?: NodePreset[]): NodePreset[] { - return _.map(nodes || [], (node) => { - return { ...this.getDefaultConfiguration(node), ...node }; - }); - } - - private getDefaultConfiguration(node: NodePreset): DeepPartial { - if (node.harvesting && node.api) { - return { - syncsource: true, - filespooling: true, - partialtransaction: true, - addressextraction: true, - mongo: true, - zeromq: true, - enableAutoSyncCleanup: false, - }; - } - if (node.api) { - return { - syncsource: false, - filespooling: true, - partialtransaction: true, - addressextraction: true, - mongo: true, - zeromq: true, - enableAutoSyncCleanup: false, - }; - } - // peer only (harvesting or not). - return { - syncsource: true, - filespooling: false, - partialtransaction: false, - addressextraction: false, - mongo: false, - zeromq: false, - enableAutoSyncCleanup: true, - }; - } - - public static resolveRoles(nodePreset: NodePreset): string { - if (nodePreset.roles) { - return nodePreset.roles; - } - const roles: string[] = []; - if (nodePreset.syncsource) { - roles.push('Peer'); - } - if (nodePreset.api) { - roles.push('Api'); - } - if (nodePreset.voting) { - roles.push('Voting'); - } - return roles.join(','); - } - - public static toConfig(account: Account | PublicAccount): ConfigAccount { - if (account instanceof Account) { - return { - privateKey: account.privateKey, - publicKey: account.publicAccount.publicKey, - address: account.address.plain(), - }; - } else { - return { - publicKey: account.publicKey, - address: account.address.plain(), - }; - } - } - - public expandRepeat(presetData: ConfigPreset): ConfigPreset { - return { - ...presetData, - databases: this.expandServicesRepeat(presetData, presetData.databases || []), - nodes: this.expandServicesRepeat(presetData, presetData.nodes || []), - gateways: this.expandServicesRepeat(presetData, presetData.gateways || []), - explorers: this.expandServicesRepeat(presetData, presetData.explorers || []), - wallets: this.expandServicesRepeat(presetData, presetData.wallets || []), - faucets: this.expandServicesRepeat(presetData, presetData.faucets || []), - nemesis: this.applyValueTemplate(presetData, presetData.nemesis), - }; - } - - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - public applyValueTemplate(context: any, value: any): any { - if (!value) { - return value; - } - if (_.isArray(value)) { - return this.expandServicesRepeat(context, value as []); - } - - if (_.isObject(value)) { - return _.mapValues(value, (v: any) => this.applyValueTemplate({ ...context, ...value }, v)); - } - - if (!_.isString(value)) { - return value; - } - return BootstrapUtils.runTemplate(value, context); - } - - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - public expandServicesRepeat(context: any, services: any[]): any[] { - return _.flatMap(services || [], (service) => { - if (service.repeat === 0) { - return []; - } - return _.range(service.repeat || 1).map((index) => { - return _.omit( - _.mapValues(service, (v: any) => - this.applyValueTemplate( - { - ...context, - ...service, - $index: index, - }, - v, - ), - ), - 'repeat', - ); - }); - }); - } - - public loadExistingPresetDataIfPreset(target: string, password: Password): ConfigPreset | undefined { - const generatedPresetLocation = this.getGeneratedPresetLocation(target); - if (existsSync(generatedPresetLocation)) { - return BootstrapUtils.loadYaml(generatedPresetLocation, password); - } - return undefined; - } - - public loadExistingPresetData(target: string, password: Password): ConfigPreset { - const presetData = this.loadExistingPresetDataIfPreset(target, password); - if (!presetData) { - throw new Error( - `The file ${this.getGeneratedPresetLocation( - target, - )} doesn't exist. Have you executed the 'config' command? Have you provided the right --target param?`, - ); - } - return presetData; - } - - public loadExistingAddressesIfPreset(target: string, password: Password): Addresses | undefined { - const generatedAddressLocation = this.getGeneratedAddressLocation(target); - if (existsSync(generatedAddressLocation)) { - const presetData = this.loadExistingPresetData(target, password); - return this.migrateAddresses(BootstrapUtils.loadYaml(generatedAddressLocation, password), presetData.networkType); - } - return undefined; - } - - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - public migrateAddresses(addresses: any, networkType: NetworkType): Addresses { - const migrations = this.getAddressesMigration(networkType); - return BootstrapUtils.migrate('addresses.yml', addresses, migrations); - } - - public getAddressesMigration(networkType: NetworkType): Migration[] { - // eslint-disable-next-line @typescript-eslint/no-this-alias - const configLoader = this; - return [ - { - description: 'Key names migration', - - migrate(from: any): any { - (from.nodes || []).forEach((nodeAddresses: any): any => { - if (nodeAddresses.signing) { - nodeAddresses.main = nodeAddresses.signing; - } else { - if (nodeAddresses.ssl) { - nodeAddresses.main = ConfigLoader.toConfig( - Account.createFromPrivateKey(nodeAddresses.ssl.privateKey, networkType), - ); - } - } - nodeAddresses.transport = configLoader.generateAccount( - networkType, - PrivateKeySecurityMode.ENCRYPT, - KeyName.Transport, - undefined, - nodeAddresses?.node?.privateKey, - undefined, - ); - delete nodeAddresses.node; - delete nodeAddresses.signing; - delete nodeAddresses.ssl; - }); - return from; - }, - }, - ]; - } - - public loadExistingAddresses(target: string, password: Password): Addresses { - const addresses = this.loadExistingAddressesIfPreset(target, password); - if (!addresses) { - throw new Error( - `The file ${this.getGeneratedAddressLocation( - target, - )} doesn't exist. Have you executed the 'config' command? Have you provided the right --target param?`, - ); - } - return addresses; - } - - public getGeneratedPresetLocation(target: string): string { - return join(target, 'preset.yml'); - } - - public getGeneratedAddressLocation(target: string): string { - return join(target, 'addresses.yml'); - } -} diff --git a/src/service/ConfigService.ts b/src/service/ConfigService.ts deleted file mode 100644 index 043a8c976..000000000 --- a/src/service/ConfigService.ts +++ /dev/null @@ -1,773 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as fs from 'fs'; -import { copyFileSync, existsSync, promises as fsPromises } from 'fs'; -import * as _ from 'lodash'; -import { join } from 'path'; -import { - Account, - AccountKeyLinkTransaction, - Convert, - Deadline, - LinkAction, - Transaction, - TransactionMapping, - UInt64, - VotingKeyLinkTransaction, - VrfKeyLinkTransaction, -} from 'symbol-sdk'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { Addresses, ConfigPreset, CustomPreset, GatewayConfigPreset, NodeAccount, NodePreset, NodeType } from '../model'; -import { AgentCertificateService } from './AgentCertificateService'; -import { BootstrapUtils, KnownError, Password } from './BootstrapUtils'; -import { CertificateService } from './CertificateService'; -import { CommandUtils } from './CommandUtils'; -import { ConfigLoader } from './ConfigLoader'; -import { CryptoUtils } from './CryptoUtils'; -import { NemgenService } from './NemgenService'; -import { RemoteNodeService } from './RemoteNodeService'; -import { ReportService } from './ReportService'; -import { RewardProgramService } from './RewardProgramService'; -import { VotingService } from './VotingService'; - -/** - * Defined presets. - */ -export enum Preset { - bootstrap = 'bootstrap', - testnet = 'testnet', - mainnet = 'mainnet', -} - -export enum KeyName { - Main = 'Main', - Remote = 'Remote', - Transport = 'Transport', - Voting = 'Voting', - VRF = 'VRF', - Agent = 'Agent', - NemesisSigner = 'Nemesis Signer', - NemesisAccount = 'Nemesis Account', -} - -export interface ConfigParams { - report: boolean; - reset: boolean; - upgrade: boolean; - offline?: boolean; - preset?: Preset; - target: string; - password?: string; - user: string; - assembly?: string; - customPreset?: string; - customPresetObject?: CustomPreset; -} - -export interface ConfigResult { - addresses: Addresses; - presetData: ConfigPreset; -} - -const logger: Logger = LoggerFactory.getLogger(LogType.System); - -export class ConfigService { - public static defaultParams: ConfigParams = { - target: BootstrapUtils.defaultTargetFolder, - report: false, - offline: false, - reset: false, - upgrade: false, - user: BootstrapUtils.CURRENT_USER, - }; - private readonly configLoader: ConfigLoader; - - constructor(private readonly root: string, private readonly params: ConfigParams) { - this.configLoader = new ConfigLoader(); - } - - public resolveConfigPreset(password: Password): ConfigPreset { - const target = this.params.target; - const presetLocation = this.configLoader.getGeneratedPresetLocation(target); - if (fs.existsSync(presetLocation) && !this.params.upgrade) { - return this.configLoader.loadExistingPresetData(target, password); - } - const oldPresetData = this.configLoader.loadExistingPresetDataIfPreset(target, password); - return this.resolveCurrentPresetData(oldPresetData, password); - } - - public async run(): Promise { - const target = this.params.target; - try { - if (this.params.reset) { - BootstrapUtils.deleteFolder(target); - } - const presetLocation = this.configLoader.getGeneratedPresetLocation(target); - const addressesLocation = this.configLoader.getGeneratedAddressLocation(target); - const password = this.params.password; - if (fs.existsSync(presetLocation) && !this.params.upgrade) { - logger.info( - `The generated preset ${presetLocation} already exist, ignoring configuration. (run -r to reset or --upgrade to upgrade)`, - ); - const presetData = this.configLoader.loadExistingPresetData(target, password); - const addresses = this.configLoader.loadExistingAddresses(target, password); - if (this.params.report) { - await new ReportService(this.root, this.params).run(presetData); - } - return { presetData, addresses }; - } - - const oldPresetData = this.configLoader.loadExistingPresetDataIfPreset(target, password); - const oldAddresses = this.configLoader.loadExistingAddressesIfPreset(target, password); - - if (oldAddresses && !oldPresetData) { - throw new KnownError(`Configuration cannot be upgraded without a previous ${presetLocation} file. (run -r to reset)`); - } - - if (!oldAddresses && oldPresetData) { - throw new KnownError(`Configuration cannot be upgraded without a previous ${addressesLocation} file. (run -r to reset)`); - } - - if (oldAddresses && oldPresetData) { - logger.info('Upgrading configuration...'); - } - - const presetData: ConfigPreset = this.resolveCurrentPresetData(oldPresetData, password); - const addresses = await this.configLoader.generateRandomConfiguration(oldAddresses, presetData); - - const privateKeySecurityMode = CryptoUtils.getPrivateKeySecurityMode(presetData.privateKeySecurityMode); - await BootstrapUtils.mkdir(target); - - this.cleanUpConfiguration(presetData); - await this.generateNodeCertificates(presetData, addresses); - await this.generateAgentCertificates(presetData, addresses); - await this.generateNodes(presetData, addresses); - await this.generateGateways(presetData); - await this.generateExplorers(presetData); - await this.generateWallets(presetData); - const isUpgrade = !!oldPresetData || !!oldAddresses; - await this.resolveNemesis(presetData, addresses, isUpgrade); - await this.copyNemesis(addresses); - if (this.params.report) { - await new ReportService(this.root, this.params).run(presetData); - } - await BootstrapUtils.writeYaml( - addressesLocation, - CryptoUtils.removePrivateKeysAccordingToSecurityMode(addresses, privateKeySecurityMode), - password, - ); - await BootstrapUtils.writeYaml(presetLocation, CryptoUtils.removePrivateKeys(presetData), password); - logger.info(`Configuration generated.`); - return { presetData, addresses }; - } catch (e) { - if (e.known) { - logger.error(e.message); - } else { - logger.error(`Unknown error generating the configuration. ${e.message}`); - logger.error(`The target folder '${target}' should be deleted!!!`); - console.log(e); - } - throw e; - } - } - - private resolveCurrentPresetData(oldPresetData: ConfigPreset | undefined, password: Password) { - return this.configLoader.createPresetData({ ...this.params, root: this.root, password: password, oldPresetData }); - } - - private async copyNemesis(addresses: Addresses) { - const target = this.params.target; - const nemesisSeedFolder = BootstrapUtils.getTargetNemesisFolder(target, false, 'seed'); - await this.validateSeedFolder(nemesisSeedFolder, `Invalid final seed folder ${nemesisSeedFolder}`); - await Promise.all( - (addresses.nodes || []).map(async (account) => { - const name = account.name; - const dataFolder = BootstrapUtils.getTargetNodesFolder(target, false, name, 'data'); - await BootstrapUtils.mkdir(dataFolder); - const seedFolder = BootstrapUtils.getTargetNodesFolder(target, false, name, 'seed'); - await BootstrapUtils.generateConfiguration({}, nemesisSeedFolder, seedFolder); - }), - ); - } - - private async validateSeedFolder(nemesisSeedFolder: string, message: string) { - BootstrapUtils.validateFolder(nemesisSeedFolder); - const seedData = join(nemesisSeedFolder, '00000', '00001.dat'); - if (!existsSync(seedData)) { - throw new KnownError(`File ${seedData} doesn't exist! ${message}`); - } - const seedIndex = join(nemesisSeedFolder, 'index.dat'); - if (!existsSync(seedIndex)) { - throw new KnownError(`File ${seedIndex} doesn't exist! ${message}`); - } - } - - private async resolveNemesis(presetData: ConfigPreset, addresses: Addresses, isUpgrade: boolean) { - const target = this.params.target; - const nemesisSeedFolder = BootstrapUtils.getTargetNemesisFolder(target, false, 'seed'); - await BootstrapUtils.mkdir(nemesisSeedFolder); - if (presetData.nemesis) { - if (isUpgrade) { - logger.info('Nemesis data cannot be generated when upgrading...'); - } else { - await this.generateNemesisConfig(presetData, addresses); - await this.validateSeedFolder(nemesisSeedFolder, `Is the generated nemesis seed a valid seed folder?`); - } - return; - } - if (isUpgrade) { - logger.info('Upgrading genesis on upgrade!'); - } - await BootstrapUtils.deleteFolder(nemesisSeedFolder); - await BootstrapUtils.mkdir(nemesisSeedFolder); - if (presetData.nemesisSeedFolder) { - await this.validateSeedFolder( - presetData.nemesisSeedFolder, - `Is the provided preset nemesisSeedFolder: ${presetData.nemesisSeedFolder} a valid seed folder?`, - ); - logger.info(`Using custom nemesis seed folder in ${presetData.nemesisSeedFolder}`); - await BootstrapUtils.generateConfiguration({}, presetData.nemesisSeedFolder, nemesisSeedFolder); - return; - } - const finalNemesisSeed = join(this.root, 'presets', presetData.preset, 'seed'); - if (existsSync(finalNemesisSeed)) { - await BootstrapUtils.generateConfiguration({}, finalNemesisSeed, nemesisSeedFolder); - await this.validateSeedFolder(nemesisSeedFolder, `Is the ${presetData.preset} preset default seed a valid seed folder?`); - return; - } - logger.warn(`Seed for preset ${presetData.preset} could not be found in ${finalNemesisSeed}`); - - throw new Error('Seed could not be found!!!!'); - } - - private async generateNodes(presetData: ConfigPreset, addresses: Addresses): Promise { - const currentFinalizationEpoch = this.params.offline - ? presetData.lastKnownNetworkEpoch - : await new RemoteNodeService().resolveCurrentFinalizationEpoch(presetData); - await Promise.all( - (addresses.nodes || []).map( - async (account, index) => - await this.generateNodeConfiguration(account, index, presetData, addresses, currentFinalizationEpoch), - ), - ); - } - - private async generateNodeCertificates(presetData: ConfigPreset, addresses: Addresses): Promise { - await Promise.all( - (addresses.nodes || []).map(async (account) => { - return await new CertificateService(this.root, this.params).run( - presetData.networkType, - presetData.symbolServerImage, - account.name, - { - main: account.main, - transport: account.transport, - }, - ); - }), - ); - } - - private async generateAgentCertificates(presetData: ConfigPreset, addresses: Addresses): Promise { - await Promise.all( - (addresses.nodes || []).map(async (account, index) => { - const node = presetData.nodes?.[index]; - if (node?.rewardProgram && account.agent) - await new AgentCertificateService(this.root, this.params).run( - presetData.networkType, - presetData.symbolServerImage, - account.name, - { - agent: account.agent, - }, - ); - }), - ); - } - - private async generateNodeConfiguration( - account: NodeAccount, - index: number, - presetData: ConfigPreset, - addresses: Addresses, - currentFinalizationEpoch: number | undefined, - ) { - const copyFrom = join(this.root, 'config', 'node'); - const name = account.name; - - const serverConfig = BootstrapUtils.getTargetNodesFolder(this.params.target, false, name, 'server-config'); - const brokerConfig = BootstrapUtils.getTargetNodesFolder(this.params.target, false, name, 'broker-config'); - const nodePreset = (presetData.nodes || [])[index]; - - const harvesterSigningPrivateKey = nodePreset.harvesting - ? await CommandUtils.resolvePrivateKey( - presetData.networkType, - account.remote || account.main, - account.remote ? KeyName.Remote : KeyName.Main, - account.name, - 'storing the harvesterSigningPrivateKey in the server properties', - ) - : ''; - const harvesterVrfPrivateKey = await CommandUtils.resolvePrivateKey( - presetData.networkType, - account.vrf, - KeyName.VRF, - account.name, - 'storing the harvesterVrfPrivateKey in the server properties', - ); - - const beneficiaryAddress = nodePreset.beneficiaryAddress || presetData.beneficiaryAddress; - const generatedContext = { - name: name, - friendlyName: nodePreset?.friendlyName || account.friendlyName, - harvesterSigningPrivateKey: harvesterSigningPrivateKey, - harvesterVrfPrivateKey: harvesterVrfPrivateKey, - unfinalizedBlocksDuration: nodePreset.voting - ? presetData.votingUnfinalizedBlocksDuration - : presetData.nonVotingUnfinalizedBlocksDuration, - beneficiaryAddress: beneficiaryAddress == undefined ? account.main.address : beneficiaryAddress, - roles: ConfigLoader.resolveRoles(nodePreset), - }; - const templateContext: any = { ...presetData, ...generatedContext, ...nodePreset }; - const excludeFiles: string[] = []; - - // Exclude files depending on the enabled extensions. To complete... - if (!templateContext.harvesting) { - excludeFiles.push('config-harvesting.properties'); - } - if (!templateContext.networkheight) { - excludeFiles.push('config-networkheight.properties'); - } - - if (nodePreset.rewardProgram) { - if (!nodePreset.host) { - throw new Error( - `Cannot create reward program configuration. You need to provide a host field in preset: ${nodePreset.name}`, - ); - } - const restService = presetData.gateways?.find((g) => g.apiNodeName == nodePreset.name); - if (!restService) { - throw new Error( - `Cannot create reward program configuration. There is not rest gateway for the api node: ${nodePreset.name}`, - ); - } - - const rewardProgram = RewardProgramService.getRewardProgram(nodePreset.rewardProgram); - templateContext.restGatewayUrl = nodePreset.restGatewayUrl || `http://${restService.host || nodePreset.host}:3000`; - templateContext.rewardProgram = rewardProgram; - templateContext.serverVersion = nodePreset.serverVersion || presetData.serverVersion; - templateContext.mainPublicKey = account.main.publicKey; - const copyFrom = join(this.root, 'config', 'agent'); - const agentConfig = BootstrapUtils.getTargetNodesFolder(this.params.target, false, name, 'agent'); - await BootstrapUtils.generateConfiguration(templateContext, copyFrom, agentConfig, []); - } - - const serverRecoveryConfig = { - addressextractionRecovery: false, - mongoRecovery: false, - zeromqRecovery: false, - filespoolingRecovery: true, - hashcacheRecovery: true, - }; - - const brokerRecoveryConfig = { - addressextractionRecovery: true, - mongoRecovery: true, - zeromqRecovery: true, - filespoolingRecovery: false, - hashcacheRecovery: true, - }; - - logger.info(`Generating ${name} server configuration`); - await BootstrapUtils.generateConfiguration({ ...serverRecoveryConfig, ...templateContext }, copyFrom, serverConfig, excludeFiles); - const peersP2PFile = await this.generateP2PFile( - presetData, - addresses, - presetData.peersP2PListLimit, - serverConfig, - NodeType.PEER_NODE, - (nodePresetData) => !!nodePresetData.syncsource && nodePresetData != nodePreset, - 'peers-p2p.json', - ); - const peersApiFile = await this.generateP2PFile( - presetData, - addresses, - presetData.peersApiListLimit, - serverConfig, - NodeType.API_NODE, - (nodePresetData) => nodePresetData.api && nodePresetData != nodePreset, - 'peers-api.json', - ); - - if (nodePreset.brokerName) { - logger.info(`Generating ${nodePreset.brokerName} broker configuration`); - await BootstrapUtils.generateConfiguration( - { ...brokerRecoveryConfig, ...templateContext }, - copyFrom, - brokerConfig, - excludeFiles, - ); - copyFileSync(peersP2PFile, join(join(brokerConfig, 'resources', 'peers-p2p.json'))); - copyFileSync(peersApiFile, join(join(brokerConfig, 'resources', 'peers-api.json'))); - } - - await new VotingService(this.params).run( - presetData, - account, - nodePreset, - currentFinalizationEpoch, - undefined, - presetData.nemesis != undefined, - ); - } - - private async generateP2PFile( - presetData: ConfigPreset, - addresses: Addresses, - listLimit: number, - outputFolder: string, - type: NodeType, - nodePresetDataFunction: (nodePresetData: NodePreset) => boolean, - jsonFileName: string, - ) { - const thisNetworkKnownPeers = (presetData.nodes || []) - .map((nodePresetData, index) => { - if (!nodePresetDataFunction(nodePresetData)) { - return undefined; - } - const node = (addresses.nodes || [])[index]; - return { - publicKey: node.main.publicKey, - endpoint: { - host: nodePresetData.host || '', - port: 7900, - }, - metadata: { - name: nodePresetData.friendlyName, - roles: ConfigLoader.resolveRoles(nodePresetData), - }, - }; - }) - .filter((i) => i); - const globalKnownPeers = presetData.knownPeers?.[type] || []; - const data = { - _info: `this file contains a list of ${type} peers`, - knownPeers: _.sampleSize([...thisNetworkKnownPeers, ...globalKnownPeers], listLimit), - }; - const peerFile = join(outputFolder, `resources`, jsonFileName); - await fs.promises.writeFile(peerFile, JSON.stringify(data, null, 2)); - await fs.promises.chmod(peerFile, 0o600); - return peerFile; - } - - private async generateNemesisConfig(presetData: ConfigPreset, addresses: Addresses) { - if (!presetData.nemesis) { - throw new Error('nemesis must not be defined!'); - } - const target = this.params.target; - const nemesisWorkingDir = BootstrapUtils.getTargetNemesisFolder(target, false); - const transactionsDirectory = join(nemesisWorkingDir, presetData.nemesis.transactionsDirectory || presetData.transactionsDirectory); - await BootstrapUtils.mkdir(transactionsDirectory); - const copyFrom = join(this.root, `config`, `nemesis`); - const moveTo = join(nemesisWorkingDir, `server-config`); - const templateContext = { ...(presetData as any), addresses }; - await Promise.all( - (addresses.nodes || []).filter((n) => n.vrf).map((n) => this.createVrfTransaction(transactionsDirectory, presetData, n)), - ); - - await Promise.all( - (addresses.nodes || []) - .filter((n) => n.remote) - .map((n) => this.createAccountKeyLinkTransaction(transactionsDirectory, presetData, n)), - ); - - await Promise.all((addresses.nodes || []).map((n) => this.createVotingKeyTransactions(transactionsDirectory, presetData, n))); - - if (presetData.nemesis.mosaics && (presetData.nemesis.transactions || presetData.nemesis.balances)) { - logger.info('Opt In mode is ON!!! balances or transactions have been provided'); - if (presetData.nemesis.transactions) { - const transactionHashes: string[] = []; - const transactions = ( - await Promise.all( - Object.entries(presetData.nemesis.transactions || {}) - .map(([key, payload]) => { - const transactionHash = Transaction.createTransactionHash( - payload, - Array.from(Convert.hexToUint8(presetData.nemesisGenerationHashSeed)), - ); - if (transactionHashes.indexOf(transactionHash) > -1) { - logger.warn(`Transaction ${key} wth hash ${transactionHash} already exist. Excluded from folder.`); - return undefined; - } - transactionHashes.push(transactionHash); - return this.storeTransaction(transactionsDirectory, key, payload); - }) - .filter((p) => p), - ) - ).filter((p) => p); - logger.info(`Found ${transactions.length} opted in transactions.`); - } - const currencyMosaic = presetData.nemesis.mosaics[0]; - const nglAccount = currencyMosaic.currencyDistributions[0]; - const originalNglAccountBalance = nglAccount.amount; - if (!nglAccount) { - throw Error('"NGL" account could not be found for opt in!'); - } - let totalOptedInBalance = 0; - if (presetData.nemesis.balances) { - Object.entries(presetData.nemesis.balances || {}).forEach(([address, amount]) => { - totalOptedInBalance += amount; - currencyMosaic.currencyDistributions.push({ address, amount }); - }); - logger.info( - `Removing ${ - Object.keys(presetData.nemesis.balances).length - } accounts (total of ${totalOptedInBalance}) from "ngl" account ${nglAccount.address}`, - ); - } - - nglAccount.amount = nglAccount.amount - totalOptedInBalance; - - const providedBalances = Object.values(currencyMosaic.currencyDistributions) - .map((d) => d.amount) - .reduce((a, b) => a + b, 0); - - const currentBalance = providedBalances; - - if (nglAccount.amount < 1) { - throw new Error( - `NGL account didn't have enough balance (${originalNglAccountBalance}) to paid all the supplied optedin namespaces and accounts of ${currentBalance}`, - ); - } - - if (currentBalance !== currencyMosaic.supply) { - throw new Error( - `Current supplied balance of ${currentBalance} is different from expected supply of ${currencyMosaic.supply}`, - ); - } - } - - await BootstrapUtils.generateConfiguration(templateContext, copyFrom, moveTo); - await new NemgenService(this.root, this.params).run(presetData); - } - - private async createVrfTransaction(transactionsDirectory: string, presetData: ConfigPreset, node: NodeAccount): Promise { - if (!node.vrf) { - throw new Error('VRF keys should have been generated!!'); - } - if (!node.main) { - throw new Error('Main keys should have been generated!!'); - } - const deadline = Deadline.createFromDTO('1'); - const vrf = VrfKeyLinkTransaction.create(deadline, node.vrf.publicKey, LinkAction.Link, presetData.networkType, UInt64.fromUint(0)); - const mainPrivateKey = await CommandUtils.resolvePrivateKey( - presetData.networkType, - node.main, - KeyName.Main, - node.name, - 'creating the vrf key link transactions', - ); - const account = Account.createFromPrivateKey(mainPrivateKey, presetData.networkType); - const signedTransaction = account.sign(vrf, presetData.nemesisGenerationHashSeed); - return await this.storeTransaction(transactionsDirectory, `vrf_${node.name}`, signedTransaction.payload); - } - - private async createAccountKeyLinkTransaction( - transactionsDirectory: string, - presetData: ConfigPreset, - node: NodeAccount, - ): Promise { - if (!node.remote) { - throw new Error('Remote keys should have been generated!!'); - } - if (!node.main) { - throw new Error('Main keys should have been generated!!'); - } - const deadline = Deadline.createFromDTO('1'); - const akl = AccountKeyLinkTransaction.create( - deadline, - node.remote.publicKey, - LinkAction.Link, - presetData.networkType, - UInt64.fromUint(0), - ); - const mainPrivateKey = await CommandUtils.resolvePrivateKey( - presetData.networkType, - node.main, - KeyName.Main, - node.name, - 'creating the account link transactions', - ); - const account = Account.createFromPrivateKey(mainPrivateKey, presetData.networkType); - const signedTransaction = account.sign(akl, presetData.nemesisGenerationHashSeed); - return await this.storeTransaction(transactionsDirectory, `remote_${node.name}`, signedTransaction.payload); - } - - private async createVotingKeyTransactions( - transactionsDirectory: string, - presetData: ConfigPreset, - node: NodeAccount, - ): Promise { - const votingFiles = node.voting || []; - const mainPrivateKey = await CommandUtils.resolvePrivateKey( - presetData.networkType, - node.main, - KeyName.Main, - node.name, - 'creating the voting key link transactions', - ); - return Promise.all( - votingFiles.map(async (votingFile) => { - const voting = VotingKeyLinkTransaction.create( - Deadline.createFromDTO('1'), - votingFile.publicKey, - votingFile.startEpoch, - votingFile.endEpoch, - LinkAction.Link, - presetData.networkType, - 1, - UInt64.fromUint(0), - ); - const account = Account.createFromPrivateKey(mainPrivateKey, presetData.networkType); - const signedTransaction = account.sign(voting, presetData.nemesisGenerationHashSeed); - return this.storeTransaction(transactionsDirectory, `voting_${node.name}`, signedTransaction.payload); - }), - ); - } - - private async storeTransaction(transactionsDirectory: string, name: string, payload: string): Promise { - const transaction = TransactionMapping.createFromPayload(payload); - await fs.promises.writeFile(`${transactionsDirectory}/${name}.bin`, Convert.hexToUint8(payload)); - return transaction as Transaction; - } - - private generateGateways(presetData: ConfigPreset) { - return Promise.all( - (presetData.gateways || []).map(async (gatewayPreset, index: number) => { - const copyFrom = join(this.root, 'config', 'rest-gateway'); - const generatedContext: Partial = { - restDeploymentToolVersion: BootstrapUtils.VERSION, - restDeploymentToolLastUpdatedDate: new Date().toISOString().slice(0, 10), - }; - const templateContext = { ...generatedContext, ...presetData, ...gatewayPreset }; - const name = templateContext.name || `rest-gateway-${index}`; - const moveTo = BootstrapUtils.getTargetGatewayFolder(this.params.target, false, name); - await BootstrapUtils.generateConfiguration(templateContext, copyFrom, moveTo); - const apiNodeConfigFolder = BootstrapUtils.getTargetNodesFolder( - this.params.target, - false, - gatewayPreset.apiNodeName, - 'server-config', - 'resources', - ); - const apiNodeCertFolder = BootstrapUtils.getTargetNodesFolder(this.params.target, false, gatewayPreset.apiNodeName, 'cert'); - await BootstrapUtils.generateConfiguration( - {}, - apiNodeConfigFolder, - join(moveTo, 'api-node-config'), - [], - ['config-network.properties', 'config-node.properties'], - ); - await BootstrapUtils.generateConfiguration( - {}, - apiNodeCertFolder, - join(moveTo, 'api-node-config', 'cert'), - [], - ['node.crt.pem', 'node.key.pem', 'ca.cert.pem'], - ); - }), - ); - } - - private generateExplorers(presetData: ConfigPreset) { - return Promise.all( - (presetData.explorers || []).map(async (explorerPreset, index: number) => { - const copyFrom = join(this.root, 'config', 'explorer'); - const templateContext = { ...presetData, ...explorerPreset }; - const name = templateContext.name || `explorer-${index}`; - const moveTo = BootstrapUtils.getTargetFolder(this.params.target, false, BootstrapUtils.targetExplorersFolder, name); - await BootstrapUtils.generateConfiguration(templateContext, copyFrom, moveTo); - }), - ); - } - - private generateWallets(presetData: ConfigPreset) { - return Promise.all( - (presetData.wallets || []).map(async (explorerPreset, index: number) => { - const copyFrom = join(this.root, 'config', 'wallet'); - const templateContext = { ...presetData, ...explorerPreset }; - const name = templateContext.name || `wallet-${index}`; - const moveTo = BootstrapUtils.getTargetFolder(this.params.target, false, BootstrapUtils.targetWalletsFolder, name); - await BootstrapUtils.generateConfiguration(templateContext, copyFrom, moveTo); - await fsPromises.chmod(join(moveTo, 'app.conf.js'), 0o777); - await fsPromises.chmod(join(moveTo, 'fees.conf.js'), 0o777); - await fsPromises.chmod(join(moveTo, 'network.conf.js'), 0o777); - await fsPromises.chmod(join(moveTo, 'profileImporter.html'), 0o777); - await Promise.all( - (explorerPreset.profiles || []).map(async (profile) => { - if (!profile.name) { - throw new Error('Profile`s name must be provided in the wallets preset when creating wallet profiles.'); - } - const profileJsonFileName = `wallet-profile-${profile.name}.json`; - - const loadProfileData = async (): Promise => { - if (profile.data) { - return JSON.stringify(profile.data, null, 2); - } - if (profile.location) { - return BootstrapUtils.loadFileAsText(profile.location); - } - return BootstrapUtils.loadFileAsText(profileJsonFileName); - }; - - try { - const profileData = await loadProfileData(); - await BootstrapUtils.writeTextFile(join(moveTo, profileJsonFileName), profileData); - } catch (e) { - const message = `Cannot create Wallet profile with name '${profile.name}'. Do you have the file '${profileJsonFileName}' in the current folder?. ${e}`; - throw new Error(message); - } - }), - ); - }), - ); - } - - private cleanUpConfiguration(presetData: ConfigPreset) { - const target = this.params.target; - (presetData.nodes || []).forEach(({ name }) => { - const serverConfigFolder = BootstrapUtils.getTargetNodesFolder(target, false, name, 'server-config'); - BootstrapUtils.deleteFolder(serverConfigFolder); - - const brokerConfigFolder = BootstrapUtils.getTargetNodesFolder(target, false, name, 'broker-config'); - BootstrapUtils.deleteFolder(brokerConfigFolder); - - // Remove old user configs when upgrading. - const userConfigFolder = BootstrapUtils.getTargetNodesFolder(target, false, name, 'userconfig'); - BootstrapUtils.deleteFolder(userConfigFolder); - - const seedFolder = BootstrapUtils.getTargetNodesFolder(target, false, name, 'seed'); - BootstrapUtils.deleteFolder(seedFolder); - }); - (presetData.gateways || []).forEach(({ name }) => { - const configFolder = BootstrapUtils.getTargetGatewayFolder(target, false, name); - BootstrapUtils.deleteFolder(configFolder); - }); - } -} diff --git a/src/service/ForgeCertificateService.ts b/src/service/ForgeCertificateService.ts deleted file mode 100644 index d117e340d..000000000 --- a/src/service/ForgeCertificateService.ts +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as forge from 'node-forge'; -import { pki } from 'node-forge'; -import { join } from 'path'; -import { CertificatePair } from '../model'; -import { BootstrapUtils } from './BootstrapUtils'; - -// eslint-disable-next-line @typescript-eslint/no-var-requires -type CertificateParams = { target: string }; - -/** - * TODO remove if not used! - */ -export class ForgeCertificateService { - constructor(protected readonly params: CertificateParams) {} - - public async run(name: string): Promise { - // Currently the SSL certifcates are created via a docker image. Migrate this to a native forge! - // https://www.npmjs.com/package/node-forge - - const target = `${this.params.target}/config/${name}/resources/cert`; - await BootstrapUtils.mkdir(target); - - const caKeyPair = await this.createCaCertificate(target, 'ca', `${name}-account`); - await this.createNodeCertificate(target, 'node', name, caKeyPair); - return { privateKey: 'a', publicKey: 'b' }; - } - - public async createCaCertificate(target: string, prefix: string, name: string): Promise { - const keyPair = pki.rsa.generateKeyPair(); - const publicKeyPem = pki.publicKeyToPem(keyPair.publicKey); - await BootstrapUtils.writeTextFile(join(target, `${prefix}.pubkey.pem`), publicKeyPem); - // console.log(publicKeyPem); - - const privateKeyToPem = pki.privateKeyToPem(keyPair.privateKey); - await BootstrapUtils.writeTextFile(join(target, `${prefix}.key.pem`), privateKeyToPem); - - const cert = pki.createCertificate(); - cert.publicKey = keyPair.publicKey; - cert.serialNumber = forge.util.bytesToHex(forge.random.getBytesSync(20)); - cert.validity.notBefore = new Date(); - cert.validity.notAfter = new Date(); - cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 20); - - const attrs = [ - { - shortName: 'CN', - value: name, - }, - ]; - cert.setSubject(attrs); - cert.sign(keyPair.privateKey); - - // convert a Forge certificate to PEM - const pemCertificate = pki.certificateToPem(cert); - await BootstrapUtils.writeTextFile(join(target, `${prefix}.cert.pem`), pemCertificate); - - return keyPair; - } - - public async createNodeCertificate(target: string, prefix: string, name: string, caKeyPair: pki.KeyPair): Promise { - const keypair = pki.rsa.generateKeyPair(); - const publicKeyPem = pki.publicKeyToPem(keypair.publicKey); - await BootstrapUtils.writeTextFile(join(target, `${prefix}.pubkey.pem`), publicKeyPem); - // console.log(publicKeyPem); - - const privateKeyToPem = pki.privateKeyToPem(keypair.privateKey); - await BootstrapUtils.writeTextFile(join(target, `${prefix}.key.pem`), privateKeyToPem); - - const cert = pki.createCertificationRequest(); - cert.publicKey = keypair.publicKey; - cert.serialNumber = forge.util.bytesToHex(forge.random.getBytesSync(20)); - - const attrs = [ - { - shortName: 'CN', - value: name, - }, - ]; - cert.setSubject(attrs); - cert.sign(caKeyPair.privateKey); - - // convert a Forge certificate to PEM - const pemCertificate = pki.certificationRequestToPem(cert); - await BootstrapUtils.writeTextFile(join(target, `${prefix}.csr.pem`), pemCertificate); - - return { privateKey: privateKeyToPem, publicKey: publicKeyPem }; - } - - private createCertCommands(target: string): string { - return ` -cd ${target} -set -e -mkdir new_certs && chmod 700 new_certs -touch index.txt - -# create CA key -openssl genpkey -out ca.key.pem -outform PEM -algorithm ed25519 -openssl pkey -inform pem -in ca.key.pem -text -noout -openssl pkey -in ca.key.pem -pubout -out ca.pubkey.pem - -# create CA cert and self-sign it -openssl req -config ca.cnf -keyform PEM -key ca.key.pem -new -x509 -days 7300 -out ca.cert.pem -openssl x509 -in ca.cert.pem -text -noout - -# create node key -openssl genpkey -out node.key.pem -outform PEM -algorithm ed25519 -openssl pkey -inform pem -in node.key.pem -text -noout - -# create request -openssl req -config node.cnf -key node.key.pem -new -out node.csr.pem -openssl req -text -noout -verify -in node.csr.pem - -### below is done after files are written -# CA side -# create serial -openssl rand -hex 19 > ./serial.dat - -# sign cert for 375 days -openssl ca -batch -config ca.cnf -days 375 -notext -in node.csr.pem -out node.crt.pem -openssl verify -CAfile ca.cert.pem node.crt.pem - -# finally create full crt -cat node.crt.pem ca.cert.pem > node.full.crt.pem -`; - } -} diff --git a/src/service/LinkService.ts b/src/service/LinkService.ts deleted file mode 100644 index d7435ddba..000000000 --- a/src/service/LinkService.ts +++ /dev/null @@ -1,410 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { prompt } from 'inquirer'; -import { - AccountInfo, - AccountKeyLinkTransaction, - Deadline, - LinkAction, - Transaction, - UInt64, - VotingKeyLinkTransaction, - VrfKeyLinkTransaction, -} from 'symbol-sdk'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { Addresses, ConfigPreset, NodeAccount } from '../model'; -import { AnnounceService, TransactionFactory } from './AnnounceService'; -import { BootstrapUtils } from './BootstrapUtils'; -import { ConfigLoader } from './ConfigLoader'; -import { VotingKeyAccount } from './VotingUtils'; - -/** - * params necessary to announce link transactions network. - */ -export type LinkParams = { - target: string; - password?: string; - url: string; - maxFee?: number | undefined; - unlink: boolean; - useKnownRestGateways: boolean; - ready?: boolean; - customPreset?: string; - removeOldLinked?: boolean; //TEST ONLY! -}; - -export type KeyAccount = { publicKey: string }; - -const logger: Logger = LoggerFactory.getLogger(LogType.System); - -export interface LinkServiceTransactionFactoryParams { - presetData: ConfigPreset; - nodeAccount: NodeAccount; - mainAccountInfo: AccountInfo; - deadline: Deadline; - maxFee: UInt64; - latestFinalizedBlockEpoch?: number; -} - -export interface GenericNodeAccount { - remote?: KeyAccount; - vrf?: KeyAccount; - voting?: VotingKeyAccount[]; -} - -export class LinkService implements TransactionFactory { - public static readonly defaultParams: LinkParams = { - target: BootstrapUtils.defaultTargetFolder, - useKnownRestGateways: false, - ready: false, - url: 'http://localhost:3000', - maxFee: 100000, - unlink: false, - }; - - private readonly configLoader: ConfigLoader; - - constructor(protected readonly params: LinkParams) { - this.configLoader = new ConfigLoader(); - } - - public async run(passedPresetData?: ConfigPreset | undefined, passedAddresses?: Addresses | undefined): Promise { - const presetData = passedPresetData ?? this.configLoader.loadExistingPresetData(this.params.target, this.params.password); - const addresses = passedAddresses ?? this.configLoader.loadExistingAddresses(this.params.target, this.params.password); - const customPreset = this.configLoader.loadCustomPreset(this.params.customPreset, this.params.password); - logger.info(`${this.params.unlink ? 'Unlinking' : 'Linking'} nodes`); - - await new AnnounceService().announce( - this.params.url, - this.params.maxFee, - this.params.useKnownRestGateways, - this.params.ready, - this.params.target, - this.configLoader.mergePresets(presetData, customPreset), - addresses, - this, - ); - } - public async createTransactions({ - presetData, - nodeAccount, - mainAccountInfo, - deadline, - maxFee, - latestFinalizedBlockEpoch, - }: LinkServiceTransactionFactoryParams): Promise { - const networkType = presetData.networkType; - const nodeName = nodeAccount.name; - - const remoteTransactionFactory = ({ publicKey }: KeyAccount, action: LinkAction): AccountKeyLinkTransaction => - AccountKeyLinkTransaction.create(deadline, publicKey, action, networkType, maxFee); - const vrfTransactionFactory = ({ publicKey }: KeyAccount, action: LinkAction): VrfKeyLinkTransaction => - VrfKeyLinkTransaction.create(deadline, publicKey, action, networkType, maxFee); - const votingKeyTransactionFactory = (account: VotingKeyAccount, action: LinkAction): VotingKeyLinkTransaction => { - return VotingKeyLinkTransaction.create( - deadline, - account.publicKey, - account.startEpoch, - account.endEpoch, - action, - networkType, - 1, - maxFee, - ); - }; - - logger.info(`Creating transactions for node: ${nodeName}, ca/main account: ${mainAccountInfo.address.plain()}`); - const transactions = await new LinkTransactionGenericFactory(this.params).createGenericTransactions( - nodeName, - { - vrf: mainAccountInfo.supplementalPublicKeys.vrf, - remote: mainAccountInfo.supplementalPublicKeys.linked, - voting: mainAccountInfo.supplementalPublicKeys.voting, - }, - nodeAccount, - latestFinalizedBlockEpoch || presetData.lastKnownNetworkEpoch, - remoteTransactionFactory, - vrfTransactionFactory, - votingKeyTransactionFactory, - ); - //Unlink transactions go first. - return transactions.sort((t1, t2) => t1.linkAction - t2.linkAction); - } -} - -export class LinkTransactionGenericFactory { - constructor(private readonly params: { unlink: boolean; ready?: boolean; removeOldLinked?: boolean }) {} - - public async createGenericTransactions( - nodeName: string, - currentMainAccountKeys: GenericNodeAccount, - nodeAccount: GenericNodeAccount, - latestFinalizedBlockEpoch: number, - remoteTransactionFactory: (keyAccount: KeyAccount, action: LinkAction) => AccountKL, - vrfTransactionFactory: (keyAccount: KeyAccount, action: LinkAction) => VRFKL, - votingKeyTransactionFactory: (account: VotingKeyAccount, action: LinkAction) => VotingKL, - ): Promise<(AccountKL | VRFKL | VotingKL)[]> { - const transactions: (AccountKL | VRFKL | VotingKL)[] = []; - const print = (account: { publicKey: string }) => `public key ${account.publicKey}`; - if (nodeAccount.remote) { - transactions.push( - ...(await this.addTransaction( - currentMainAccountKeys.remote, - remoteTransactionFactory, - nodeName, - 'Remote', - nodeAccount.remote, - print, - )), - ); - } - - if (nodeAccount.vrf) { - transactions.push( - ...(await this.addTransaction(currentMainAccountKeys.vrf, vrfTransactionFactory, nodeName, 'VRF', nodeAccount.vrf, print)), - ); - } - const votingPrint = (account: VotingKeyAccount) => - `public key ${account.publicKey}, start epoch ${account.startEpoch}, end epoch ${account.endEpoch}`; - if (this.params.unlink) { - transactions.push( - ...(await this.addVotingKeyUnlinkTransactions( - currentMainAccountKeys?.voting || [], - nodeAccount.voting || [], - nodeName, - votingKeyTransactionFactory, - votingPrint, - )), - ); - } else { - transactions.push( - ...(await this.addVotingKeyLinkTransactions( - currentMainAccountKeys?.voting || [], - nodeAccount.voting || [], - nodeName, - latestFinalizedBlockEpoch, - votingKeyTransactionFactory, - votingPrint, - )), - ); - } - return transactions; - } - - public async addVotingKeyLinkTransactions( - linkedVotingKeyAccounts: VotingKeyAccount[], - votingKeyFiles: VotingKeyAccount[], - nodeName: string, - lastKnownNetworkEpoch: number, - transactionFactory: (transaction: VotingKeyAccount, action: LinkAction) => T, - print: (account: VotingKeyAccount) => string, - ): Promise { - const transactions: T[] = []; - const accountName = 'Voting'; - let remainingVotingKeys: VotingKeyAccount[] = linkedVotingKeyAccounts; - for (const alreadyLinkedAccount of linkedVotingKeyAccounts) { - if ( - alreadyLinkedAccount.endEpoch < lastKnownNetworkEpoch && - (await this.confirmUnlink(accountName, alreadyLinkedAccount, print)) - ) { - const unlinkTransaction = transactionFactory(alreadyLinkedAccount, LinkAction.Unlink); - logger.info( - `Creating Unlink ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print(alreadyLinkedAccount)}.`, - ); - remainingVotingKeys = remainingVotingKeys.filter((a) => a != alreadyLinkedAccount); - transactions.push(unlinkTransaction); - } - } - const activeVotingKeyFiles = votingKeyFiles.filter((a) => a.endEpoch >= lastKnownNetworkEpoch); - for (const accountTobeLinked of activeVotingKeyFiles) { - const alreadyLinkedAccount = remainingVotingKeys.find((a) => - LinkTransactionGenericFactory.overlapsVotingAccounts(accountTobeLinked, a), - ); - const isAlreadyLinkedSameAccount = - alreadyLinkedAccount?.publicKey.toUpperCase() === accountTobeLinked.publicKey.toUpperCase() && - alreadyLinkedAccount?.startEpoch === accountTobeLinked.startEpoch && - alreadyLinkedAccount?.endEpoch === accountTobeLinked.endEpoch; - - let addTransaction = !isAlreadyLinkedSameAccount; - if (alreadyLinkedAccount && !isAlreadyLinkedSameAccount) { - logger.warn( - `Node ${nodeName} is already linked to ${accountName} ${print( - alreadyLinkedAccount, - )} which is different from the configured ${print(accountTobeLinked)}.`, - ); - if (await this.confirmUnlink(accountName, alreadyLinkedAccount, print)) { - const unlinkTransaction = transactionFactory(alreadyLinkedAccount, LinkAction.Unlink); - logger.info( - `Creating Unlink ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print( - alreadyLinkedAccount, - )}.`, - ); - remainingVotingKeys = remainingVotingKeys.filter((a) => a != alreadyLinkedAccount); - transactions.push(unlinkTransaction); - } else { - addTransaction = false; - } - } - - if (remainingVotingKeys.length < 3 && addTransaction) { - const transaction = transactionFactory(accountTobeLinked, LinkAction.Link); - logger.info( - `Creating Link ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print(accountTobeLinked)}.`, - ); - transactions.push(transaction); - remainingVotingKeys.push(accountTobeLinked); - } - } - return transactions; - } - - public async addVotingKeyUnlinkTransactions( - linkedVotingKeyAccounts: VotingKeyAccount[], - votingKeyFiles: VotingKeyAccount[], - nodeName: string, - transactionFactory: (transaction: VotingKeyAccount, action: LinkAction) => T, - print: (account: VotingKeyAccount) => string, - ): Promise { - const transactions: T[] = []; - const accountName = 'Voting'; - let remainingVotingKeys: VotingKeyAccount[] = linkedVotingKeyAccounts; - for (const accountTobeLinked of votingKeyFiles) { - const alreadyLinkedAccount = remainingVotingKeys.find((a) => - LinkTransactionGenericFactory.overlapsVotingAccounts(accountTobeLinked, a), - ); - const isAlreadyLinkedSameAccount = - alreadyLinkedAccount?.publicKey.toUpperCase() === accountTobeLinked.publicKey.toUpperCase() && - alreadyLinkedAccount?.startEpoch === accountTobeLinked.startEpoch && - alreadyLinkedAccount?.endEpoch === accountTobeLinked.endEpoch; - - if (alreadyLinkedAccount && isAlreadyLinkedSameAccount) { - if (await this.confirmUnlink(accountName, alreadyLinkedAccount, print)) { - const unlinkTransaction = transactionFactory(alreadyLinkedAccount, LinkAction.Unlink); - logger.info( - `Creating Unlink ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print( - alreadyLinkedAccount, - )}.`, - ); - remainingVotingKeys = remainingVotingKeys.filter((a) => a != alreadyLinkedAccount); - transactions.push(unlinkTransaction); - } - } - } - return transactions; - } - - public static overlapsVotingAccounts(x: VotingKeyAccount, y: VotingKeyAccount): boolean { - return x.endEpoch >= y.startEpoch && x.startEpoch <= y.endEpoch; - } - - private async addTransaction( - alreadyLinkedAccount: A | undefined, - transactionFactory: (transaction: A, action: LinkAction) => T, - nodeName: string, - accountName: string, - accountTobeLinked: A, - print: (account: A) => string, - ): Promise { - const transactions: T[] = []; - const isAlreadyLinkedSameAccount = accountTobeLinked.publicKey.toUpperCase() === alreadyLinkedAccount?.publicKey.toUpperCase(); - if (this.params.unlink) { - if (alreadyLinkedAccount) { - if (isAlreadyLinkedSameAccount) { - const transaction = transactionFactory(accountTobeLinked, LinkAction.Unlink); - logger.info( - `Creating Unlink ${accountName} Transaction for node ${nodeName} to ${accountName} ${print(accountTobeLinked)}.`, - ); - transactions.push(transaction); - } else { - logger.warn( - `Node ${nodeName} is linked to a different ${accountName} ${print( - alreadyLinkedAccount, - )} and not the configured ${print(accountTobeLinked)}.`, - ); - - if (await this.confirmUnlink(accountName, alreadyLinkedAccount, print)) { - const transaction = transactionFactory(alreadyLinkedAccount, LinkAction.Unlink); - logger.info( - `Creating Unlink ${accountName} Transaction for node ${nodeName} to ${accountName} ${print( - alreadyLinkedAccount, - )}.`, - ); - transactions.push(transaction); - } - } - } else { - logger.info(`Node ${nodeName} is not linked to ${accountName} ${print(accountTobeLinked)}.`); - } - } else { - if (alreadyLinkedAccount) { - if (isAlreadyLinkedSameAccount) { - logger.info(`Node ${nodeName} is already linked to ${accountName} ${print(alreadyLinkedAccount)}.`); - } else { - logger.warn( - `Node ${nodeName} is already linked to ${accountName} ${print( - alreadyLinkedAccount, - )} which is different from the configured ${print(accountTobeLinked)}.`, - ); - - if (await this.confirmUnlink(accountName, alreadyLinkedAccount, print)) { - const unlinkTransaction = transactionFactory(alreadyLinkedAccount, LinkAction.Unlink); - logger.info( - `Creating Unlink ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print( - alreadyLinkedAccount, - )}.`, - ); - transactions.push(unlinkTransaction); - - const linkTransaction = transactionFactory(accountTobeLinked, LinkAction.Link); - logger.info( - `Creating Link ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print(accountTobeLinked)}.`, - ); - transactions.push(linkTransaction); - } - } - } else { - const transaction = transactionFactory(accountTobeLinked, LinkAction.Link); - logger.info( - `Creating Link ${accountName} Transaction from Node ${nodeName} to ${accountName} ${print(accountTobeLinked)}.`, - ); - transactions.push(transaction); - } - } - return transactions; - } - - private async confirmUnlink(accountName: string, alreadyLinkedAccount: T, print: (account: T) => string): Promise { - if (this.params.removeOldLinked === undefined) { - return ( - this.params.ready || - ( - await prompt([ - { - name: 'value', - message: `Do you want to unlink the old ${accountName} ${print(alreadyLinkedAccount)}?`, - type: 'confirm', - default: false, - }, - ]) - ).value - ); - } - return this.params.removeOldLinked; - } -} diff --git a/src/service/RemoteNodeService.ts b/src/service/RemoteNodeService.ts deleted file mode 100644 index c52fb5f96..000000000 --- a/src/service/RemoteNodeService.ts +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2021 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { lookup } from 'dns'; -import { ChainInfo, RepositoryFactory, RepositoryFactoryHttp } from 'symbol-sdk'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { ConfigPreset } from '../model'; - -const logger: Logger = LoggerFactory.getLogger(LogType.System); - -export interface RepositoryInfo { - repositoryFactory: RepositoryFactory; - restGatewayUrl: string; - chainInfo: ChainInfo; -} -export class RemoteNodeService { - public async resolveCurrentFinalizationEpoch(presetData: ConfigPreset): Promise { - const votingNode = presetData.nodes?.find((n) => n.voting); - if (!votingNode) { - return presetData.lastKnownNetworkEpoch; - } - const remoteNodeService = new RemoteNodeService(); - if (!(await remoteNodeService.isConnectedToInternet())) { - return presetData.lastKnownNetworkEpoch; - } - return (await remoteNodeService.getBestFinalizationEpoch(presetData.knownRestGateways)) || presetData.lastKnownNetworkEpoch; - } - - public async getBestFinalizationEpoch(urls: string[] | undefined): Promise { - if (!urls || !urls.length) { - return undefined; - } - const repositoryInfo = this.sortByHeight(await this.getKnownNodeRepositoryInfos(urls)).find((i) => i); - const finalizationEpoch = repositoryInfo?.chainInfo.latestFinalizedBlock.finalizationEpoch; - if (finalizationEpoch) { - logger.info(`The current network finalization epoch is ${finalizationEpoch}`); - } - return finalizationEpoch; - } - - public async getBestRepositoryInfo(urls: string[]): Promise { - const repositoryInfo = this.sortByHeight(await this.getKnownNodeRepositoryInfos(urls)).find((i) => i); - if (!repositoryInfo) { - throw new Error(`No up and running node could be found out of: \n - ${urls.join('\n - ')}`); - } - logger.info(`Connecting to node ${repositoryInfo.restGatewayUrl}`); - return repositoryInfo; - } - - private sortByHeight(repos: RepositoryInfo[]): RepositoryInfo[] { - return repos - .filter((b) => b.chainInfo) - .sort((a, b) => { - if (!a.chainInfo) { - return 1; - } - if (!b.chainInfo) { - return -1; - } - return b.chainInfo.height.compare(a.chainInfo.height); - }); - } - - public isConnectedToInternet(): Promise { - return new Promise((resolve) => { - lookup('google.com', (err) => { - if (err && err.code == 'ENOTFOUND') { - resolve(false); - } else { - resolve(true); - } - }); - }); - } - - private async getKnownNodeRepositoryInfos(urls: string[]): Promise { - logger.info(`Looking for the best node out of: \n - ${urls.join('\n - ')}`); - return ( - await Promise.all( - urls.map( - async (restGatewayUrl): Promise => { - const repositoryFactory = new RepositoryFactoryHttp(restGatewayUrl); - try { - const chainInfo = await repositoryFactory.createChainRepository().getChainInfo().toPromise(); - return { - restGatewayUrl, - repositoryFactory, - chainInfo, - }; - } catch (e) { - const message = `There has been an error talking to node ${restGatewayUrl}. Error: ${e.message}}`; - logger.warn(message); - return undefined; - } - }, - ), - ) - ) - .filter((i) => i) - .map((i) => i as RepositoryInfo); - } -} diff --git a/src/service/RewardProgramService.ts b/src/service/RewardProgramService.ts deleted file mode 100644 index bc55f6840..000000000 --- a/src/service/RewardProgramService.ts +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { readFileSync } from 'fs'; -import { join } from 'path'; -import { Address, Deadline, PlainMessage, Transaction, TransferTransaction, UInt64 } from 'symbol-sdk'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { Addresses, ConfigPreset, NodeAccount, NodePreset } from '../model'; -import { AnnounceService, TransactionFactory } from './AnnounceService'; -import { BootstrapUtils, KnownError } from './BootstrapUtils'; -import { ConfigLoader } from './ConfigLoader'; - -const logger: Logger = LoggerFactory.getLogger(); - -export type RewardProgramParams = { - target: string; - password?: string; - url: string; - maxFee?: number; - useKnownRestGateways: boolean; - ready?: boolean; - customPreset?: string; -}; - -export interface RewardProgramServiceTransactionFactoryParams { - presetData: ConfigPreset; - nodePreset: NodePreset; - nodeAccount: NodeAccount; - deadline: Deadline; - maxFee: UInt64; -} - -export enum RewardProgram { - EarlyAdoption = 'EarlyAdoption', - Ecosystem = 'Ecosystem', - SuperNode = 'SuperNode', - MonitorOnly = 'MonitorOnly', -} - -export class RewardProgramService implements TransactionFactory { - public static readonly defaultParams: RewardProgramParams = { - useKnownRestGateways: false, - target: BootstrapUtils.defaultTargetFolder, - url: 'http://localhost:3000', - }; - - private readonly configLoader: ConfigLoader; - - constructor(protected readonly params: RewardProgramParams) { - this.configLoader = new ConfigLoader(); - } - - public static getRewardProgram(value: string): RewardProgram { - const programs = Object.values(RewardProgram) as RewardProgram[]; - const program = programs.find((p) => p.toLowerCase() == value.toLowerCase()); - if (program) { - return program; - } - throw new KnownError(`${value} is not a valid Reward program. Please use one of ${programs.join(', ')}`); - } - - public async enroll(passedPresetData?: ConfigPreset | undefined, passedAddresses?: Addresses | undefined): Promise { - const presetData = passedPresetData ?? this.configLoader.loadExistingPresetData(this.params.target, this.params.password); - const addresses = passedAddresses ?? this.configLoader.loadExistingAddresses(this.params.target, this.params.password); - const customPreset = this.configLoader.loadCustomPreset(this.params.customPreset, this.params.password); - if (!presetData.rewardProgramEnrollmentAddress) { - logger.warn('This network does not have a reward program controller public key. Nodes cannot be registered.'); - return; - } - await new AnnounceService().announce( - this.params.url, - this.params.maxFee, - this.params.useKnownRestGateways, - this.params.ready, - this.params.target, - this.configLoader.mergePresets(presetData, customPreset), - addresses, - this, - '1M+', - ); - } - - async createTransactions({ - presetData, - nodePreset, - nodeAccount, - deadline, - maxFee, - }: RewardProgramServiceTransactionFactoryParams): Promise { - const transactions: Transaction[] = []; - const networkType = presetData.networkType; - if (!nodePreset.rewardProgram) { - logger.warn(`Node ${nodeAccount.name} hasn't been configured with rewardProgram: preset property.`); - return transactions; - } - - if (!presetData.rewardProgramEnrollmentAddress) { - return transactions; - } - const rewardProgramEnrollmentAddress = Address.createFromRawAddress(presetData.rewardProgramEnrollmentAddress); - const agentPublicKey = nodeAccount.transport.publicKey; - if (!agentPublicKey) { - logger.warn(`Cannot resolve harvester public key of node ${nodeAccount.name}`); - return transactions; - } - if (!nodePreset.host) { - logger.warn( - `Node ${nodeAccount.name} public host name hasn't been provided! Please use 'host: myNodeHost' custom preset param.`, - ); - return transactions; - } - const agentUrl = - nodePreset.agentUrl || `https://${nodePreset.host}:${nodePreset.rewardProgramAgentPort || presetData.rewardProgramAgentPort}`; - const certFolder = BootstrapUtils.getTargetNodesFolder(this.params.target, false, nodePreset.name, 'agent'); - const base64AgentCaCsrFile = readFileSync(join(certFolder, 'agent-ca.csr.pem'), 'base64'); - const plainMessage = `enroll ${agentUrl} ${base64AgentCaCsrFile}`; - const message = PlainMessage.create(plainMessage); - logger.info(`Creating enrolment transfer with message '${plainMessage}'`); - const transaction: Transaction = TransferTransaction.create( - deadline, - rewardProgramEnrollmentAddress, - [], - message, - networkType, - maxFee, - ); - return [transaction]; - } -} diff --git a/src/service/SshpkService.ts b/src/service/SshpkService.ts deleted file mode 100644 index 02de9366a..000000000 --- a/src/service/SshpkService.ts +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { join, resolve } from 'path'; -import * as sshpk from 'sshpk'; -import { Key } from 'sshpk'; -import { Convert, Crypto } from 'symbol-sdk'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { CertificatePair, ConfigPreset, NodeAccount } from '../model'; -import { BootstrapUtils } from './BootstrapUtils'; -import { ConfigParams } from './ConfigService'; - -const anySshpk = sshpk as any; -type CertificateParams = ConfigParams; - -const logger: Logger = LoggerFactory.getLogger(LogType.System); - -interface NodeCertificates { - ssl: CertificatePair; - node: CertificatePair; -} - -interface SshpkKey { - publicKey: string; - privateKey: string; - key: Key; -} - -/** - * TODO remote if not used! - */ -export class SshpkService { - constructor(private readonly root: string, protected readonly params: CertificateParams) {} - - private async createKey(certFolder: string, privateKeyFileName: string, publicKeyFileName: string): Promise { - const key = anySshpk.generatePrivateKey('ed25519'); - const privateKey = Convert.uint8ToHex(key.part.k.data); - const publicKey = Convert.uint8ToHex(key.toPublic().part.A.data); - - console.log('pem', key.toString('pem')); - console.log('openssh', key.toString('openssh')); - console.log('ssh', key.toString('ssh')); - console.log('pkcs1', key.toString('pkcs1')); - - await BootstrapUtils.writeTextFile(join(certFolder, privateKeyFileName), key.toString('pem')); - await BootstrapUtils.writeTextFile(join(certFolder, publicKeyFileName), key.toPublic().toString('pem')); - - return { - privateKey, - publicKey, - key, - }; - } - - public async run(presetData: ConfigPreset, nodeAccount: NodeAccount): Promise { - const name = nodeAccount.name; - const copyFrom = `${this.root}/config/cert`; - - const certFolder = BootstrapUtils.getTargetNodesFolder(this.params.target, false, name, 'userconfig', 'resources', 'cert2'); - await BootstrapUtils.mkdir(certFolder); - const newCertsFolder = join(certFolder, 'new_certs'); - await BootstrapUtils.mkdir(newCertsFolder); - await BootstrapUtils.generateConfiguration({ name: name }, copyFrom, certFolder); - - if (!BootstrapUtils.isWindows()) { - // fs.chmodSync(newCertsFolder, 700); - } - - await BootstrapUtils.writeTextFile(join(certFolder, 'index.txt'), ''); - await BootstrapUtils.writeTextFile(join(certFolder, 'index.txt.attr'), ''); - await BootstrapUtils.writeTextFile(join(certFolder, 'serial.dat'), Convert.uint8ToHex(Crypto.randomBytes(19)).toUpperCase()); - - const ssl = await this.createKey(certFolder, 'ca.key.pem', 'ca.pubkey.pem'); - const node = await this.createKey(certFolder, 'node.key.pem', 'node.pubkey.pem'); - - // const certificate = sshpk.createSelfSignedCertificate('subject', ssl.key); - // console.log(certificate); - - const command = this.createCertCommands('/data'); - await BootstrapUtils.writeTextFile(join(certFolder, 'createCertificate.sh'), command); - const cmd = ['bash', 'createCertificate.sh']; - const binds = [`${resolve(certFolder)}:/data:rw`]; - const userId = await BootstrapUtils.resolveDockerUserFromParam(this.params.user); - const symbolServerImage = presetData.symbolServerImage; - const { stdout, stderr } = await BootstrapUtils.runImageUsingExec({ - catapultAppFolder: presetData.catapultAppFolder, - image: symbolServerImage, - userId: userId, - workdir: '/data', - cmds: cmd, - binds: binds, - }); - if (stdout.indexOf('Certificate Created') < 0) { - logger.info(stdout); - logger.error(stderr); - throw new Error('Certificate creation failed. Check the logs!'); - } - console.log(stdout); - console.log(stderr); - - // const key = sshpk.parseKey(node.node.privateKey, 'auto'); - - // const generatePrivateKey = anySshpk.generatePrivateKey(); - - // console.log(generatePrivateKey.toString('pem')); - // console.log(generatePrivateKey.toPublic().toString('pem')); - - // console.log(generatePrivateKey); - - // const publicKey = generatePrivateKey.toPublic().part.A.data; - // console.log(Convert.uint8ToHex(publicKey)); - - // const privateKey = generatePrivateKey.part.k.data; - // console.log(Convert.uint8ToHex(privateKey)); - - return { ssl, node }; - } - - private createCertCommands(target: string): string { - return ` -set -e - -# create CA cert and self-sign it -openssl req -config ca.cnf -keyform PEM -key ca.key.pem -new -x509 -days 7300 -out ca.cert.pem -openssl x509 -in ca.cert.pem -text -noout - -# create node key - -# create request -openssl req -config node.cnf -key node.key.pem -new -out node.csr.pem -openssl req -text -noout -verify -in node.csr.pem - -### below is done after files are written - -# sign cert for 375 days -openssl ca -batch -config ca.cnf -days 375 -notext -in node.csr.pem -out node.crt.pem -openssl verify -CAfile ca.cert.pem node.crt.pem - -# finally create full crt -cat node.crt.pem ca.cert.pem > node.full.crt.pem -echo "Certificate Created" -`; - } -} diff --git a/src/service/VerifyService.ts b/src/service/VerifyService.ts deleted file mode 100644 index a57c42707..000000000 --- a/src/service/VerifyService.ts +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright 2021 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as os from 'os'; -import * as semver from 'semver'; -import { BootstrapUtils } from './BootstrapUtils'; -export interface VerifyReport { - platform: string; - lines: ReportLine[]; -} - -export interface ReportLine { - header: string; - message: string; - recommendation?: string; -} - -export interface ExpectedVersions { - node: string; - docker: string; - dockerCompose: string; -} - -const defaultExpectedVersions: ExpectedVersions = { - node: '12.0.0', - docker: '18.3.0', - dockerCompose: '1.25.0', -}; - -export class VerifyService { - private readonly expectedVersions: ExpectedVersions; - public readonly semverOptions = { loose: true }; - - constructor(private readonly root = BootstrapUtils.resolveRootFolder(), expectedVersions: Partial = {}) { - this.expectedVersions = { ...defaultExpectedVersions, ...expectedVersions }; - } - - public async createReport(): Promise { - const lines: ReportLine[] = []; - const platform = `${os.type()} - ${os.release()} - ${os.platform()}`; - lines.push(await this.testNodeJs()); - const docker = await this.testDocker(); - lines.push(docker); - lines.push(await this.testDockerCompose()); - if (!docker.recommendation) lines.push(await this.testDockerRun()); - if (!BootstrapUtils.isWindows()) { - lines.push(await this.testSudo()); - } - return { lines, platform }; - } - - public loadVersion(text: string): string | undefined { - return text - .replace(',', '') - .split(' ') - .map((word) => { - const coerce = semver.coerce(word.trim(), this.semverOptions); - return coerce?.raw; - }) - .find((a) => a) - ?.trim(); - } - - public async testNodeJs(): Promise { - const header = 'NodeVersion'; - const recommendationUrl = `https://nodejs.org/en/download/package-manager/`; - const output = process.versions.node; - return this.verifyInstalledApp(async () => output, header, this.expectedVersions.node, recommendationUrl); - } - - public async testDocker(): Promise { - const header = 'Docker Version'; - const command = 'docker --version'; - const recommendationUrl = `https://docs.docker.com/get-docker/`; - return this.verifyInstalledApp( - async () => await this.loadVersionFromCommand(command), - header, - this.expectedVersions.docker, - recommendationUrl, - ); - } - public async testDockerCompose(): Promise { - const header = 'Docker Compose Version'; - const command = 'docker-compose --version'; - const recommendationUrl = `https://docs.docker.com/compose/install/`; - return this.verifyInstalledApp( - async () => await this.loadVersionFromCommand(command), - header, - this.expectedVersions.dockerCompose, - recommendationUrl, - ); - } - - public async testDockerRun(): Promise { - const header = 'Docker Run Test'; - const command = 'docker run hello-world'; - const recommendationUrl = `https://www.digitalocean.com/community/questions/how-to-fix-docker-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket`; - - try { - const output = (await BootstrapUtils.exec(command)).stdout.trim(); - const expectedText = 'Hello from Docker!'; - if (output.indexOf(expectedText) == -1) { - return { - header, - message: `Command '${command}' could not be executed: Error: '${expectedText}' not in output text \n${output}`, - recommendation: `Please check ${recommendationUrl}`, - }; - } - return { header, message: `Command '${command}' executed!` }; - } catch (e) { - return { - header, - message: `Command '${command}' could not be executed: Error: ${e.message}`, - recommendation: `Please check ${recommendationUrl}`, - }; - } - } - - public async testSudo(): Promise { - const header = 'Sudo User Test'; - if (BootstrapUtils.isRoot()) { - return { - header, - message: `Your are running with the sudo user!`, - recommendation: `Either don't use sudo or create a non sudo user to run Bootstrap.`, - }; - } - return { header, message: `Your are not the sudo user!` }; - } - - public async loadVersionFromCommand(command: string): Promise { - return this.loadVersion((await BootstrapUtils.exec(command)).stdout.trim()); - } - - private async verifyInstalledApp( - versionLoader: () => Promise, - header: string, - minVersion: string, - recommendationUrl: string, - ): Promise { - try { - const version = await versionLoader(); - if (!version) { - return { - header, - message: `Version could not be found! Output: ${versionLoader}`, - recommendation: `At least version ${minVersion} is required. Check ${recommendationUrl}`, - }; - } - if (semver.lt(version, minVersion, this.semverOptions)) { - return { - header, - message: version, - recommendation: `At least version ${minVersion} is required. Currently installed version is ${version}. Check ${recommendationUrl}`, - }; - } - return { header, message: version }; - } catch (e) { - return { - header, - message: `Error: ${e.message}`, - recommendation: `At least version ${minVersion} is required. Check ${recommendationUrl}`, - }; - } - } -} diff --git a/src/service/VotingService.ts b/src/service/VotingService.ts deleted file mode 100644 index 54179b400..000000000 --- a/src/service/VotingService.ts +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { writeFileSync } from 'fs'; -import { join } from 'path'; -import { Account } from 'symbol-sdk'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { ConfigPreset, NodeAccount, NodePreset } from '../model'; -import { BootstrapUtils } from './BootstrapUtils'; -import { VotingUtils } from './VotingUtils'; - -type VotingParams = { target: string; user: string }; - -const logger: Logger = LoggerFactory.getLogger(LogType.System); - -export class VotingService { - constructor(protected readonly params: VotingParams) {} - - public async run( - presetData: ConfigPreset, - nodeAccount: NodeAccount, - nodePreset: NodePreset, - currentNetworkEpoch: number | undefined, - updateVotingKey: boolean | undefined, - nemesisBlock: boolean, - ): Promise { - const symbolServerImage = presetData.symbolServerImage; - const networkEpoch = currentNetworkEpoch || presetData.lastKnownNetworkEpoch || 1; - const update = updateVotingKey === undefined ? presetData.autoUpdateVotingKeys : updateVotingKey; - if (!nodePreset?.voting) { - logger.info(`Node ${nodeAccount.name} is not voting.`); - return false; - } - const target = this.params.target; - const votingKeysFolder = join(BootstrapUtils.getTargetNodesFolder(target, true, nodeAccount.name), presetData.votingKeysDirectory); - const votingKeyDesiredFutureLifetime = presetData.votingKeyDesiredFutureLifetime; - const votingKeyDesiredLifetime = presetData.votingKeyDesiredLifetime; - if (votingKeyDesiredFutureLifetime > votingKeyDesiredLifetime) { - throw new Error('votingKeyDesiredFutureLifetime cannot be greater than votingKeyDesiredLifetime'); - } - await BootstrapUtils.mkdir(votingKeysFolder); - const votingUtils = new VotingUtils(); - await BootstrapUtils.deleteFile(join(votingKeysFolder, 'metadata.yml')); - const currentVotingFiles = votingUtils.loadVotingFiles(votingKeysFolder); - const maxVotingKeyEndEpoch = Math.max(currentVotingFiles[currentVotingFiles.length - 1]?.endEpoch || 0, networkEpoch - 1); - - //This updates the addresses.yml data about existing voting files. If a user puts a manual file into the voting folder, this will update the yml file automatically. - nodeAccount.voting = currentVotingFiles; - - if (maxVotingKeyEndEpoch > networkEpoch + votingKeyDesiredFutureLifetime) { - logger.info(`Node ${nodeAccount.name}'s voting files are up-to-date.`); - return false; - } - // First file is created automatically on start, second file may or may not. - if (!update && currentVotingFiles.length > 0) { - logger.warn(''); - logger.warn(`Voting key files are close to EXPIRATION or have EXPIRED!. Run the 'symbol-bootstrap updateVotingKeys' command!`); - logger.warn(''); - return false; - } - const votingKeyStartEpoch = maxVotingKeyEndEpoch + 1; - const votingKeyEndEpoch = maxVotingKeyEndEpoch + votingKeyDesiredLifetime; - const votingAccount = Account.generateNewAccount(presetData.networkType); - const votingPrivateKey = votingAccount.privateKey; - const epochs = votingKeyEndEpoch - votingKeyStartEpoch + 1; - logger.info(`Creating Voting key file of ${epochs} epochs for node ${nodeAccount.name}. This could take a while!`); - const privateKeyTreeFileName = `private_key_tree${currentVotingFiles.length + 1}.dat`; - if (presetData.useExperimentalNativeVotingKeyGeneration) { - logger.info('Voting file is created using the native typescript voting key file generator!'); - const votingFile = await votingUtils.createVotingFile(votingPrivateKey, votingKeyStartEpoch, votingKeyEndEpoch); - writeFileSync(join(votingKeysFolder, privateKeyTreeFileName), votingFile); - } else { - logger.info(`Voting file is created using docker and the default's catapult.tools.votingkey`); - const binds = [`${votingKeysFolder}:/votingKeys:rw`]; - const cmd = [ - `${presetData.catapultAppFolder}/bin/catapult.tools.votingkey`, - `--secret=${votingPrivateKey}`, - `--startEpoch=${votingKeyStartEpoch}`, - `--endEpoch=${votingKeyEndEpoch}`, - `--output=/votingKeys/${privateKeyTreeFileName}`, - ]; - const userId = await BootstrapUtils.resolveDockerUserFromParam(this.params.user); - const { stdout, stderr } = await BootstrapUtils.runImageUsingExec({ - catapultAppFolder: presetData.catapultAppFolder, - image: symbolServerImage, - userId: userId, - cmds: cmd, - binds: binds, - }); - - if (stdout.indexOf(' ') > -1) { - logger.info(stdout); - logger.error(stderr); - throw new Error('Voting key failed. Check the logs!'); - } - } - if (nemesisBlock) { - // For a new private network, voting keys are in the nemesisBlock. - logger.info(''); - logger.info( - `A new Voting File for the node ${nodeAccount.name} has been generated. The link transaction will be included in the nemesis block.`, - ); - logger.info(''); - } else { - // For a running network. - logger.warn(''); - logger.warn(`A new Voting File for the node ${nodeAccount.name} has been generated! `); - - logger.warn( - `Remember to send a Voting Key Link transaction from main ${nodeAccount.main.address} using the Voting Public Key: ${votingAccount.publicKey} with startEpoch: ${votingKeyStartEpoch} and endEpoch: ${votingKeyEndEpoch}`, - ); - logger.warn(`For linking, you can use 'symbol-bootstrap link' command, the symbol cli, or the symbol desktop wallet.`); - logger.warn(''); - } - nodeAccount.voting = votingUtils.loadVotingFiles(votingKeysFolder); - return true; - } -} diff --git a/src/service/ZipUtils.ts b/src/service/ZipUtils.ts deleted file mode 100644 index 21e5da987..000000000 --- a/src/service/ZipUtils.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2021 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as archiver from 'archiver'; -import { createWriteStream } from 'fs'; -import * as StreamZip from 'node-stream-zip'; -import { LogType } from '../logger'; -import Logger from '../logger/Logger'; -import LoggerFactory from '../logger/LoggerFactory'; -import { BootstrapUtils } from './BootstrapUtils'; - -export interface ZipItem { - from: string; - directory: boolean; - to: string; - blacklist?: string[]; -} -const logger: Logger = LoggerFactory.getLogger(LogType.System); - -export class ZipUtils { - public static async zip(destination: string, items: ZipItem[]): Promise { - const output = createWriteStream(destination); - const archive = archiver('zip', { - zlib: { level: 9 }, // Sets the compression level. - }); - archive.pipe(output); - return new Promise(async (resolve, reject) => { - output.on('close', () => { - console.log(''); - console.info(`Zip file ${destination} size ${Math.floor(archive.pointer() / 1024)} MB has been created.`); - resolve(); - }); - - output.on('end', () => { - console.log(''); - console.log('Data has been drained'); - }); - - // good practice to catch warnings (ie stat failures and other non-blocking errors) - archive.on('warning', (err: any) => { - console.log(''); - if (err.code === 'ENOENT') { - // log warning - console.log(`There has been an warning creating ZIP file '${destination}' ${err.message || err}`); - } else { - // throw error - console.log(`There has been an error creating ZIP file '${destination}' ${err.message || err}`); - reject(err); - } - }); - - // good practice to catch this error explicitly - archive.on('error', function (err: any) { - console.log(`There has been an error creating ZIP file '${destination}' ${err.message || err}`); - reject(err); - }); - - for (const item of items) { - if (item.directory) { - archive.directory(item.from, item.to || false, (entry) => { - if (item.blacklist?.find((s) => entry.name === s)) { - return false; - } - return entry; - }); - } else { - archive.file(item.from, { name: item.to }); - } - } - archive.on('progress', (progress) => { - const message = `${progress.entries.processed} entries zipped!`; - BootstrapUtils.logSameLineMessage(message); - }); - await archive.finalize(); - }); - } - - public static unzip(zipFile: string, innerFolder: string, targetFolder: string): Promise { - const zip = new StreamZip({ - file: zipFile, - storeEntries: true, - }); - logger.info(`Unzipping Backup Sync's '${innerFolder}' into '${targetFolder}'. This could take a while!`); - let totalFiles = 0; - let process = 0; - return new Promise((resolve, reject) => { - zip.on('entry', (entry) => { - if (!entry.isDirectory && totalFiles) { - process++; - const percentage = ((process * 100) / totalFiles).toFixed(2); - const message = `${percentage}% | ${process} files unzipped out of ${totalFiles}`; - BootstrapUtils.logSameLineMessage(message); - } - if (BootstrapUtils.stopProcess) { - zip.close(); - console.log(); - reject(new Error('Process cancelled!')); - } - }); - zip.on('ready', () => { - totalFiles = zip.entriesCount; - zip.extract(innerFolder, targetFolder, (err) => { - zip.close(); - if (err) { - console.log(); - reject(err); - } else { - console.log(); - logger.info(`Unzipped '${targetFolder}' created`); - resolve(); - } - }); - }); - }); - } -} diff --git a/src/service/index.ts b/src/service/index.ts deleted file mode 100644 index 4032214c3..000000000 --- a/src/service/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -// created from 'create-ts-index' - -export * from './AgentCertificateService'; -export * from './AnnounceService'; -export * from './BootstrapService'; -export * from './BootstrapUtils'; -export * from './CertificateService'; -export * from './CommandUtils'; -export * from './ComposeService'; -export * from './ConfigLoader'; -export * from './ConfigService'; -export * from './CryptoUtils'; -export * from './ForgeCertificateService'; -export * from './LinkService'; -export * from './NemgenService'; -export * from './PortService'; -export * from './RemoteNodeService'; -export * from './ReportService'; -export * from './RewardProgramService'; -export * from './RunService'; -export * from './SshpkService'; -export * from './VerifyService'; -export * from './VotingService'; -export * from './VotingUtils'; -export * from './ZipUtils'; diff --git a/test/agentCertificates/index.txt b/test/agentCertificates/index.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/test/commands/config.test.ts b/test/commands/config.test.ts deleted file mode 100644 index 3453dc3c7..000000000 --- a/test/commands/config.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { test } from '@oclif/test'; - -describe('config', () => { - test.stdout() - .command(['config', '-r', '--password', '1111']) - .it('runs config', (ctx) => { - console.log(ctx.stdout); - }); -}); - -describe('config with opt in', () => { - test.stdout() - .command(['config', '-r', '-c', './test/optin_preset.yml', '--noPassword']) - .it('runs config', (ctx) => { - console.log(ctx.stdout); - }); -}); diff --git a/test/composes/expected-docker-compose-bootstrap-custom-compose.yml b/test/composes/expected-docker-compose-bootstrap-custom-compose.yml deleted file mode 100644 index b8a6df29d..000000000 --- a/test/composes/expected-docker-compose-bootstrap-custom-compose.yml +++ /dev/null @@ -1,126 +0,0 @@ -version: '2.4' -services: - db-0: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db-0 - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db-0 --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - ports: - - '27017:27017' - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db-0:/dbdata:rw' - cpu_count: 2 - mac_address: '02:42:ac:11:65:43' - deploy: - resources: - reservations: - memory: 4G - peer-node-0: - user: '1000:1000' - container_name: peer-node-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-0 NORMAL false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/peer-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - cpu_count: 4 - shm_size: 64M - deploy: - resources: - limits: - memory: 4G - networks: - default: - aliases: - - peer-node-0 - hostname: peer-node-0 - peer-node-1: - user: '1000:1000' - container_name: peer-node-1 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-1 NORMAL false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7901:7900' - volumes: - - '../nodes/peer-node-1:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - cpu_count: 4 - shm_size: 64M - deploy: - resources: - limits: - memory: 4G - networks: - default: - aliases: - - peer-node-1 - hostname: peer-node-1 - api-node-0: - user: '1000:1000' - container_name: api-node-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-0 NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-0 - - api-node-broker-0 - networks: - default: - aliases: - - api-node-0 - hostname: api-node-0 - api-node-broker-0: - user: '1000:1000' - container_name: api-node-broker-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-0 NORMAL - ports: - - '8002:7902' - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-0 - rest-gateway-0: - container_name: rest-gateway-0 - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3000:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway-0:/symbol-workdir:rw' - depends_on: - - db-0 - networks: - default: - ipv4_address: 172.20.0.25 -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-docker-compose-bootstrap-custom.yml b/test/composes/expected-docker-compose-bootstrap-custom.yml deleted file mode 100644 index 7a21f15eb..000000000 --- a/test/composes/expected-docker-compose-bootstrap-custom.yml +++ /dev/null @@ -1,129 +0,0 @@ -version: '2.4' -services: - db-0: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db-0 - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db-0 --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - ports: - - '27017:27017' - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db-0:/dbdata:rw' - peer-node-0: - container_name: peer-node-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-0 DEBUG false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/peer-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - networks: - default: - aliases: - - peer-node-0 - hostname: peer-node-0 - peer-node-1: - container_name: peer-node-1 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-1 DEBUG false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7901:7900' - volumes: - - '../nodes/peer-node-1:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - networks: - default: - aliases: - - peer-node-1 - hostname: peer-node-1 - api-node-0: - container_name: api-node-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-0 DEBUG true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-0 - - api-node-broker-0 - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - networks: - default: - aliases: - - api-node-0 - hostname: api-node-0 - api-node-broker-0: - container_name: api-node-broker-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-0 DEBUG - ports: - - '8002:7902' - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-0 - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - rest-gateway-0: - container_name: rest-gateway-0 - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3000:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway-0:/symbol-workdir:rw' - depends_on: - - db-0 - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - networks: - default: - ipv4_address: 172.20.0.25 -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-docker-compose-bootstrap-full.yml b/test/composes/expected-docker-compose-bootstrap-full.yml deleted file mode 100644 index c2863474d..000000000 --- a/test/composes/expected-docker-compose-bootstrap-full.yml +++ /dev/null @@ -1,193 +0,0 @@ -version: '2.4' -services: - db-0: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db-0 - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db-0 --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - ports: - - '27017:27017' - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db-0:/dbdata:rw' - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - peer-node-0: - container_name: peer-node-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-0 DEBUG false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/peer-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - networks: - default: - aliases: - - peer-node-0 - hostname: peer-node-0 - peer-node-1: - container_name: peer-node-1 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-1 DEBUG false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7901:7900' - volumes: - - '../nodes/peer-node-1:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - networks: - default: - aliases: - - peer-node-1 - hostname: peer-node-1 - api-node-0: - container_name: api-node-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-0 DEBUG true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-0 - - api-node-broker-0 - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - networks: - default: - aliases: - - api-node-0 - hostname: api-node-0 - api-node-broker-0: - container_name: api-node-broker-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-0 DEBUG - ports: - - '8002:7902' - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-0 - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - rest-gateway-0: - container_name: rest-gateway-0 - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3000:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway-0:/symbol-workdir:rw' - depends_on: - - db-0 - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - networks: - default: - ipv4_address: 172.20.0.25 - wallet-0: - container_name: wallet-0 - image: 'symbolplatform/symbol-desktop-wallet:1.0.1' - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '80:80' - restart: 'on-failure:2' - volumes: - - '../wallets/wallet-0:/usr/share/nginx/html/config:ro' - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - explorer-0: - container_name: explorer-0 - image: 'symbolplatform/symbol-explorer:0.6.3-alpha' - command: ash -c "/bin/ash /symbol-commands/run.sh explorer-0" - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '90:80' - restart: 'on-failure:2' - volumes: - - '../explorers/explorer-0:/symbol-workdir:ro' - - './explorer:/symbol-commands:ro' - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true - faucet-0: - container_name: faucet-0 - image: 'symbolplatform/symbol-faucet:0.5.0-alpha' - stop_signal: SIGINT - environment: - DEFAULT_NODE: 'http://rest-gateway-0:3000' - DEFAULT_NODE_CLIENT: 'http://localhost:3000' - NATIVE_CURRENCY_NAME: cat.currency - NATIVE_CURRENCY_OUT_MAX: 500000000 - NATIVE_CURRENCY_OUT_MIN: 100000000 - MAX_FEE: 5000000 - ENOUGH_BALANCE: 100000000000 - MAX_UNCONFIRMED: 99 - BLACKLIST_MOSAIC_IDS: '[]' - EXPLORER_URL: 'http://localhost:90/' - FAUCET_PRIVATE_KEY: MockMe - NATIVE_CURRENCY_ID: Mockme2 - restart: 'on-failure:2' - ports: - - '100:4000' - depends_on: - - rest-gateway-0 - security_opt: - - 'seccomp:unconfined' - cap_add: - - ALL - privileged: true -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-docker-compose-bootstrap-repeat.yml b/test/composes/expected-docker-compose-bootstrap-repeat.yml deleted file mode 100644 index 2b2a65750..000000000 --- a/test/composes/expected-docker-compose-bootstrap-repeat.yml +++ /dev/null @@ -1,465 +0,0 @@ -version: '2.4' -services: - db-0: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db-0 - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db-0 --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - ports: - - '27017:27017' - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db-0:/dbdata:rw' - db-1: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db-1 - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db-1 --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - ports: - - '27018:27017' - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db-1:/dbdata:rw' - db-2: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db-2 - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db-2 --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - ports: - - '27019:27017' - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db-2:/dbdata:rw' - db-3: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db-3 - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db-3 --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - ports: - - '27020:27017' - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db-3:/dbdata:rw' - peer-node-0: - user: '1000:1000' - container_name: peer-node-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-0 NORMAL false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/peer-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - networks: - default: - aliases: - - peer-node-0 - hostname: peer-node-0 - peer-node-1: - user: '1000:1000' - container_name: peer-node-1 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-1 NORMAL false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7901:7900' - volumes: - - '../nodes/peer-node-1:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - networks: - default: - aliases: - - peer-node-1 - hostname: peer-node-1 - peer-node-2: - user: '1000:1000' - container_name: peer-node-2 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-2 NORMAL false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7902:7900' - volumes: - - '../nodes/peer-node-2:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - networks: - default: - aliases: - - peer-node-2 - hostname: peer-node-2 - api-node-0: - user: '1000:1000' - container_name: api-node-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-0 NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-0 - - api-node-broker-0 - networks: - default: - aliases: - - api-node-0 - hostname: api-node-0 - api-node-1: - user: '1000:1000' - container_name: api-node-1 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-1 NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-1:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-1 - - api-node-broker-1 - networks: - default: - aliases: - - api-node-1 - hostname: api-node-1 - api-node-2: - user: '1000:1000' - container_name: api-node-2 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-2 NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-2:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-2 - - api-node-broker-2 - networks: - default: - aliases: - - api-node-2 - hostname: api-node-2 - api-node-3: - user: '1000:1000' - container_name: api-node-3 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-3 NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-3:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-3 - - api-node-broker-3 - networks: - default: - aliases: - - api-node-3 - hostname: api-node-3 - api-node-broker-0: - user: '1000:1000' - container_name: api-node-broker-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-0 NORMAL - ports: - - '8002:7902' - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-0 - api-node-broker-1: - user: '1000:1000' - container_name: api-node-broker-1 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-1 NORMAL - ports: - - '8003:7902' - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-1:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-1 - api-node-broker-2: - user: '1000:1000' - container_name: api-node-broker-2 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-2 NORMAL - ports: - - '8004:7902' - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-2:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-2 - api-node-broker-3: - user: '1000:1000' - container_name: api-node-broker-3 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-3 NORMAL - ports: - - '8005:7902' - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-3:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-3 - rest-gateway-0: - container_name: rest-gateway-0 - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3000:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway-0:/symbol-workdir:rw' - depends_on: - - db-0 - networks: - default: - ipv4_address: 172.20.0.25 - rest-gateway-1: - container_name: rest-gateway-1 - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3001:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway-1:/symbol-workdir:rw' - depends_on: - - db-1 - networks: - default: - ipv4_address: 172.20.0.26 - rest-gateway-2: - container_name: rest-gateway-2 - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3002:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway-2:/symbol-workdir:rw' - depends_on: - - db-2 - networks: - default: - ipv4_address: 172.20.0.27 - rest-gateway-3: - container_name: rest-gateway-3 - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3003:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway-3:/symbol-workdir:rw' - depends_on: - - db-3 - networks: - default: - ipv4_address: 172.20.0.28 - wallet-0: - container_name: wallet-0 - image: 'symbolplatform/symbol-desktop-wallet:1.0.1' - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '80:80' - restart: 'on-failure:2' - volumes: - - '../wallets/wallet-0:/usr/share/nginx/html/config:ro' - wallet-1: - container_name: wallet-1 - image: 'symbolplatform/symbol-desktop-wallet:1.0.1' - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '81:80' - restart: 'on-failure:2' - volumes: - - '../wallets/wallet-1:/usr/share/nginx/html/config:ro' - explorer-0: - container_name: explorer-0 - image: 'symbolplatform/symbol-explorer:0.6.3-alpha' - command: ash -c "/bin/ash /symbol-commands/run.sh explorer-0" - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '90:80' - restart: 'on-failure:2' - volumes: - - '../explorers/explorer-0:/symbol-workdir:ro' - - './explorer:/symbol-commands:ro' - explorer-1: - container_name: explorer-1 - image: 'symbolplatform/symbol-explorer:0.6.3-alpha' - command: ash -c "/bin/ash /symbol-commands/run.sh explorer-1" - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '91:80' - restart: 'on-failure:2' - volumes: - - '../explorers/explorer-1:/symbol-workdir:ro' - - './explorer:/symbol-commands:ro' - explorer-2: - container_name: explorer-2 - image: 'symbolplatform/symbol-explorer:0.6.3-alpha' - command: ash -c "/bin/ash /symbol-commands/run.sh explorer-2" - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '92:80' - restart: 'on-failure:2' - volumes: - - '../explorers/explorer-2:/symbol-workdir:ro' - - './explorer:/symbol-commands:ro' - faucet-0: - container_name: faucet-0 - image: 'symbolplatform/symbol-faucet:0.5.0-alpha' - stop_signal: SIGINT - environment: - DEFAULT_NODE: 'http://rest-gateway-0:3000' - DEFAULT_NODE_CLIENT: 'http://localhost:3000' - NATIVE_CURRENCY_NAME: cat.currency - NATIVE_CURRENCY_OUT_MAX: 500000000 - NATIVE_CURRENCY_OUT_MIN: 100000000 - MAX_FEE: 5000000 - ENOUGH_BALANCE: 100000000000 - MAX_UNCONFIRMED: 99 - BLACKLIST_MOSAIC_IDS: '[]' - EXPLORER_URL: 'http://localhost:90/' - FAUCET_PRIVATE_KEY: MockMe - NATIVE_CURRENCY_ID: Mockme2 - restart: 'on-failure:2' - ports: - - '100:4000' - depends_on: - - rest-gateway-0 - faucet-1: - container_name: faucet-1 - image: 'symbolplatform/symbol-faucet:0.5.0-alpha' - stop_signal: SIGINT - environment: - DEFAULT_NODE: 'http://rest-gateway-1:3001' - DEFAULT_NODE_CLIENT: 'http://localhost:3001' - NATIVE_CURRENCY_NAME: cat.currency - NATIVE_CURRENCY_OUT_MAX: 500000000 - NATIVE_CURRENCY_OUT_MIN: 100000000 - MAX_FEE: 5000000 - ENOUGH_BALANCE: 100000000000 - MAX_UNCONFIRMED: 99 - BLACKLIST_MOSAIC_IDS: '[]' - EXPLORER_URL: 'http://localhost:91/' - FAUCET_PRIVATE_KEY: MockMe - NATIVE_CURRENCY_ID: Mockme2 - restart: 'on-failure:2' - ports: - - '101:4000' - depends_on: - - rest-gateway-1 - faucet-2: - container_name: faucet-2 - image: 'symbolplatform/symbol-faucet:0.5.0-alpha' - stop_signal: SIGINT - environment: - DEFAULT_NODE: 'http://rest-gateway-2:3002' - DEFAULT_NODE_CLIENT: 'http://localhost:3002' - NATIVE_CURRENCY_NAME: cat.currency - NATIVE_CURRENCY_OUT_MAX: 500000000 - NATIVE_CURRENCY_OUT_MIN: 100000000 - MAX_FEE: 5000000 - ENOUGH_BALANCE: 100000000000 - MAX_UNCONFIRMED: 99 - BLACKLIST_MOSAIC_IDS: '[]' - EXPLORER_URL: 'http://localhost:92/' - FAUCET_PRIVATE_KEY: MockMe - NATIVE_CURRENCY_ID: Mockme2 - restart: 'on-failure:2' - ports: - - '102:4000' - depends_on: - - rest-gateway-2 - faucet-3: - container_name: faucet-3 - image: 'symbolplatform/symbol-faucet:0.5.0-alpha' - stop_signal: SIGINT - environment: - DEFAULT_NODE: 'http://rest-gateway-3:3003' - DEFAULT_NODE_CLIENT: 'http://localhost:3003' - NATIVE_CURRENCY_NAME: cat.currency - NATIVE_CURRENCY_OUT_MAX: 500000000 - NATIVE_CURRENCY_OUT_MIN: 100000000 - MAX_FEE: 5000000 - ENOUGH_BALANCE: 100000000000 - MAX_UNCONFIRMED: 99 - BLACKLIST_MOSAIC_IDS: '[]' - EXPLORER_URL: 'http://localhost:93/' - FAUCET_PRIVATE_KEY: MockMe - NATIVE_CURRENCY_ID: Mockme2 - restart: 'on-failure:2' - ports: - - '103:4000' - depends_on: - - rest-gateway-3 -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-docker-compose-bootstrap.yml b/test/composes/expected-docker-compose-bootstrap.yml deleted file mode 100644 index f2915689c..000000000 --- a/test/composes/expected-docker-compose-bootstrap.yml +++ /dev/null @@ -1,108 +0,0 @@ -version: '2.4' -services: - db-0: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db-0 - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db-0 --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - ports: - - '27017:27017' - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db-0:/dbdata:rw' - peer-node-0: - user: '1000:1000' - container_name: peer-node-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-0 NORMAL false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/peer-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - networks: - default: - aliases: - - peer-node-0 - hostname: peer-node-0 - peer-node-1: - user: '1000:1000' - container_name: peer-node-1 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker peer-node-1 NORMAL false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7901:7900' - volumes: - - '../nodes/peer-node-1:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - networks: - default: - aliases: - - peer-node-1 - hostname: peer-node-1 - api-node-0: - user: '1000:1000' - container_name: api-node-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker api-node-0 NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-0 - - api-node-broker-0 - networks: - default: - aliases: - - api-node-0 - hostname: api-node-0 - api-node-broker-0: - user: '1000:1000' - container_name: api-node-broker-0 - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server api-node-broker-0 NORMAL - ports: - - '8002:7902' - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/api-node-0:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db-0 - rest-gateway-0: - container_name: rest-gateway-0 - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3000:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway-0:/symbol-workdir:rw' - depends_on: - - db-0 - networks: - default: - ipv4_address: 172.20.0.25 -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-mainnet-api-compose.yml b/test/composes/expected-mainnet-api-compose.yml deleted file mode 100644 index 602cdd629..000000000 --- a/test/composes/expected-mainnet-api-compose.yml +++ /dev/null @@ -1,65 +0,0 @@ -version: '2.4' -services: - db: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db:/dbdata:rw' - node: - user: '1000:1000' - container_name: node - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - - broker - broker: - user: '1000:1000' - container_name: broker - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - rest-gateway: - container_name: rest-gateway - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3000:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway:/symbol-workdir:rw' - depends_on: - - db - networks: - default: - ipv4_address: 172.20.0.25 -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-mainnet-dual-compose.yml b/test/composes/expected-mainnet-dual-compose.yml deleted file mode 100644 index 602cdd629..000000000 --- a/test/composes/expected-mainnet-dual-compose.yml +++ /dev/null @@ -1,65 +0,0 @@ -version: '2.4' -services: - db: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db:/dbdata:rw' - node: - user: '1000:1000' - container_name: node - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - - broker - broker: - user: '1000:1000' - container_name: broker - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - rest-gateway: - container_name: rest-gateway - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3000:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway:/symbol-workdir:rw' - depends_on: - - db - networks: - default: - ipv4_address: 172.20.0.25 -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-mainnet-peer-compose.yml b/test/composes/expected-mainnet-peer-compose.yml deleted file mode 100644 index 8cb408c32..000000000 --- a/test/composes/expected-mainnet-peer-compose.yml +++ /dev/null @@ -1,20 +0,0 @@ -version: '2.4' -services: - node: - user: '1000:1000' - container_name: node - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-testnet-api-compose.yml b/test/composes/expected-testnet-api-compose.yml deleted file mode 100644 index 602cdd629..000000000 --- a/test/composes/expected-testnet-api-compose.yml +++ /dev/null @@ -1,65 +0,0 @@ -version: '2.4' -services: - db: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db:/dbdata:rw' - node: - user: '1000:1000' - container_name: node - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - - broker - broker: - user: '1000:1000' - container_name: broker - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - rest-gateway: - container_name: rest-gateway - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3000:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway:/symbol-workdir:rw' - depends_on: - - db - networks: - default: - ipv4_address: 172.20.0.25 -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-testnet-dual-compose.yml b/test/composes/expected-testnet-dual-compose.yml deleted file mode 100644 index 602cdd629..000000000 --- a/test/composes/expected-testnet-dual-compose.yml +++ /dev/null @@ -1,65 +0,0 @@ -version: '2.4' -services: - db: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db:/dbdata:rw' - node: - user: '1000:1000' - container_name: node - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - - broker - broker: - user: '1000:1000' - container_name: broker - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - rest-gateway: - container_name: rest-gateway - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3000:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway:/symbol-workdir:rw' - depends_on: - - db - networks: - default: - ipv4_address: 172.20.0.25 -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-testnet-peer-compose.yml b/test/composes/expected-testnet-peer-compose.yml deleted file mode 100644 index 8cb408c32..000000000 --- a/test/composes/expected-testnet-peer-compose.yml +++ /dev/null @@ -1,20 +0,0 @@ -version: '2.4' -services: - node: - user: '1000:1000' - container_name: node - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL false - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-testnet-supernode-compose.yml b/test/composes/expected-testnet-supernode-compose.yml deleted file mode 100644 index b86054f9d..000000000 --- a/test/composes/expected-testnet-supernode-compose.yml +++ /dev/null @@ -1,82 +0,0 @@ -version: '2.4' -services: - db: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db:/dbdata:rw' - node: - user: '1000:1000' - container_name: node - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - - broker - networks: - default: - aliases: - - fboucquez-agent-symbollocal.ngrok.io - hostname: fboucquez-agent-symbollocal.ngrok.io - broker: - user: '1000:1000' - container_name: broker - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - node-agent: - user: '1000:1000' - container_name: node-agent - image: 'symbolplatform/symbol-node-rewards-agent:2.0.0' - working_dir: /symbol-workdir - entrypoint: /app/agent-linux.bin --config agent.properties - ports: - - '7881:7881' - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/node/agent:/symbol-workdir:rw' - rest-gateway: - container_name: rest-gateway - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3000:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway:/symbol-workdir:rw' - depends_on: - - db - networks: - default: - ipv4_address: 172.20.0.25 -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/composes/expected-testnet-voting-compose.yml b/test/composes/expected-testnet-voting-compose.yml deleted file mode 100644 index 602cdd629..000000000 --- a/test/composes/expected-testnet-voting-compose.yml +++ /dev/null @@ -1,65 +0,0 @@ -version: '2.4' -services: - db: - user: '1000:1000' - environment: - MONGO_INITDB_DATABASE: catapult - container_name: db - image: 'mongo:4.4.3-bionic' - command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 - stop_signal: SIGINT - working_dir: /docker-entrypoint-initdb.d - volumes: - - './mongo:/docker-entrypoint-initdb.d:ro' - - '../databases/db:/dbdata:rw' - node: - user: '1000:1000' - container_name: node - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true - stop_signal: SIGINT - working_dir: /symbol-workdir - restart: 'on-failure:2' - ports: - - '7900:7900' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - - broker - broker: - user: '1000:1000' - container_name: broker - image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' - working_dir: /symbol-workdir - command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL - stop_signal: SIGINT - restart: 'on-failure:2' - volumes: - - '../nodes/node:/symbol-workdir:rw' - - './server:/symbol-commands:ro' - depends_on: - - db - rest-gateway: - container_name: rest-gateway - user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' - command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json - stop_signal: SIGINT - working_dir: /symbol-workdir - ports: - - '3000:3000' - restart: 'on-failure:2' - volumes: - - '../gateways/rest-gateway:/symbol-workdir:rw' - depends_on: - - db - networks: - default: - ipv4_address: 172.20.0.25 -networks: - default: - ipam: - config: - - subnet: 172.20.0.0/24 diff --git a/test/custom_preset-aws.yml b/test/custom_preset-aws.yml deleted file mode 100644 index 5ff2ddf9e..000000000 --- a/test/custom_preset-aws.yml +++ /dev/null @@ -1,37 +0,0 @@ -minFeeMultiplier: 0 -defaultDynamicFeeMultiplier: 0 -baseNamespace: 'bob' -currencyName: 'marley' -harvestingName: 'reggae' -explorerUrl: http://aws-explorer-url:80 -faucetUrl: http://aws-faucet-url:80 -nemesisGenerationHashSeed: A4D7C86BB3D1334FF40D607C891C676FBC76D336285A9AB851CD4ACC8CCB3276 -#totalChainImportance: 8998999998000000 -#nemesis: -## Disable harvest currency with repeat 0 -# mosaics: [{}, { repeat: 0 }] -databases: - - repeat: 1 -nodes: - - repeat: 2 - - repeat: 1 -gateways: - - repeat: 1 -explorers: - - repeat: 1 - defaultNode: 'http://aws-rest-gateway-{{$index}}:3000' - restNodes: - - 'http://aws-rest-gateway-{{$index}}:3000' -wallets: - - repeat: 1 - defaultNodeUrl: 'http://aws-rest-gateway-{{$index}}:3000' - restNodes: - - friendlyName: 'Bootstrap Rest $index' - url: 'http://aws-rest-gateway-{{$index}}:3000' - roles: 2 -faucets: - - repeat: 1 - environment: - DEFAULT_NODE: 'http://aws-rest-gateway-{{$index}}:3000' - DEFAULT_NODE_CLIENT: 'http://aws-rest-gateway-{{$index}}:3000' - EXPLORER_URL: 'http://aws-explorer-url-{{$index}}:80/' diff --git a/test/custom_preset.yml b/test/custom_preset.yml deleted file mode 100644 index e12d8600a..000000000 --- a/test/custom_preset.yml +++ /dev/null @@ -1,25 +0,0 @@ -minFeeMultiplier: 0 -defaultDynamicFeeMultiplier: 0 -baseNamespace: 'bob' -currencyName: 'marley' -harvestingName: 'reggae' -nemesisGenerationHashSeed: 6C1B92391CCB41C96478471C2634C111D9E989DECD66130C0430B5B8D20117CD -dockerComposeDebugMode: true -#totalChainImportance: 8998999998000000 -#nemesis: -## Disable harvest currency with repeat 0 -# mosaics: [{}, { repeat: 0 }] - -databases: - - dockerComposeDebugMode: false -nemesis: - nemesisSignerPrivateKey: B2AF9675B7AA8CCCBB3C1072256B3DF7354223FB5C490FFBDDB1C60696E25219 - balances: - TAI4NEL4SBQDSPY2XKMPIGOC53UALIXJ5WHRJVQ: 10000000000 - TAWBSSHIKZNX6E65FJG4BVIJR236Z64Z77CMOJA: 5000000000 - TDTZLYALSDGWBW5ZJJYKOM65YFHELZHGEEUDZ7A: 3000000000 - -wallets: - - profiles: - - name: test - location: ./test/profiles/wallet-profile-test.json diff --git a/test/nodeCertificates/index.txt b/test/nodeCertificates/index.txt deleted file mode 100644 index 2359e5a3c..000000000 --- a/test/nodeCertificates/index.txt +++ /dev/null @@ -1 +0,0 @@ -V 220422130421Z 4C87E5C49034B711E2DA38D116366829DA144B unknown /CN=test-node diff --git a/test/nodeCertificates/index.txt.attr b/test/nodeCertificates/index.txt.attr deleted file mode 100644 index 8f7e63a34..000000000 --- a/test/nodeCertificates/index.txt.attr +++ /dev/null @@ -1 +0,0 @@ -unique_subject = yes diff --git a/test/nodeCertificates/index.txt.attr.old b/test/nodeCertificates/index.txt.attr.old deleted file mode 100644 index e69de29bb..000000000 diff --git a/test/nodeCertificates/index.txt.old b/test/nodeCertificates/index.txt.old deleted file mode 100644 index e69de29bb..000000000 diff --git a/test/nodeCertificates/serial.dat b/test/nodeCertificates/serial.dat deleted file mode 100644 index de34200e6..000000000 --- a/test/nodeCertificates/serial.dat +++ /dev/null @@ -1 +0,0 @@ -4C87E5C49034B711E2DA38D116366829DA144C diff --git a/test/nodeCertificates/serial.dat.old b/test/nodeCertificates/serial.dat.old deleted file mode 100644 index 1fee9c748..000000000 --- a/test/nodeCertificates/serial.dat.old +++ /dev/null @@ -1 +0,0 @@ -4c87e5c49034b711e2da38d116366829da144b diff --git a/test/optin_preset.yml b/test/optin_preset.yml deleted file mode 100644 index 14449f83b..000000000 --- a/test/optin_preset.yml +++ /dev/null @@ -1,122 +0,0 @@ -nemesis: - mosaics: [{}, { repeat: 0 }] - balances: - NDJFMGFMK43ZFFX53VJZPS2ILPU5G3LQWIKWGWQ: 1859 - NBHPH5NTHZ2AGLJQ2TV52MR4FEX2NMNJDMFRKDI: 429 - NCGMCEBBSUQROGN3J7L5ABA3E3LLX6ZTDAAHNMI: 6990 - NATIJFY3KDV2ZU5ZUW2I2KNRNN2BNNQ7GOGV57Q: 2522 - NBNSWADEVCDXW4GSC625IJYTUERAIHJKGLUMEVQ: 9585 - NDANEQG5JW54UIR2B54A2AF7FYFZT5M5D26SFSY: 9748 - NA4Z3WTFWWIGXLIJWNPHAIPSBUEM7OMG46SYWXY: 2989 - NADBUCUUM43NDA7BJVDK3MBGY3QGOLLOYN44P5I: 518 - NDLM2HWK3P254SQYOIDJ3SPOK7WOOS3ZQMNVVXI: 9994 - NCEWZ7W23GJTNWBR4MDKUHOKFPXBMVEIIPYIJMA: 992 - NBOK3UZ7RRZPI7HXTKF4A26V2WSHB7CXOYIOATQ: 9046 - NBY2SY6VALV4P74JJCSSJMNOQRGXT4VGKOOICIA: 2475 - NCCCLK7RPYGYLTWIPHNCNUQ5LZUBIZVCMBMWYTI: 5986 - NAGYZLMRNJZ4XIJQV52VQVVFXRMXVJNVWDTU7SY: 7330 - NBHMSS7JNFN47ZXWANX6GMWIIS5CKB3NI4X3JVY: 1426 - NDDVOXDE3B66VT7LVPAL3JJEHU2FFCXK4K4DW2A: 5131 - NDAU4NRZUJYMVEF5GY4UCKYKZ5SLVFVKW3ENFTQ: 3185 - NAK3WWLX3FFPEP3YIS4Q6RNJKUR5YNE5GHPWOUI: 1975 - NBYSRN2WPVJTT7INL5KQMMX2MOXSMVT3PNAAMPI: 9519 - NAGB2BZA3CVM4AINW675F5NBMPVRSMNVA64V2NA: 13 - NASJJPN6FHN2VMUNM5BZU3N757W22EQYY7EZ7LI: 2087 - NBZM5Q75QDELWS5TVX6Q6ENDA7MSFVSPARGPJRY: 8392 - NDXYLT6FGTTNGZGIPRPOM3AZYHZWG6LY7MIGBTI: 582 - NALTGTJSZPYRPVSHR6V4RKMWXL75LS7WA4J7H6I: 5991 - NDONRKHNYLWJERTYOYIO2ZMQDQNBAVINATKNUVY: 3605 - NDR6QYAEJXFDOZI44P2SVKGRDBM4AV2YE7S4RMQ: 8124 - NAXHCSGYTBMO7MWHWRGVVJKFTE67VVM4PXNYCXY: 3231 - NCDXZSKFJGRLZFAZOQ5XZUF2HXK7G4TRF25U2QI: 8584 - NBVBUQKAZE5HHKWH2EL3GW5PZYURLARC3I7QWMI: 3966 - NCR5BA26ZTXLZ7O5J36AK3TQGKE7RA7GAHJBIUA: 6600 - NDGNASISJLQORB2TYZWTJQ5IQFNEQ6MSEHW5HSI: 5838 - NB3Z7FL7OKTGOIVJ3W465V3MPK6YWFXUTXYM2RQ: 649 - NBBANGND3JZ53FFBAPMWUUWIJE2GI3NIQA44VKY: 6975 - NBDB7EYL4L6VNAJCIBKDLELIZIHD62NWNSI7E3Q: 3130 - NDUO6MWM2P6SECGP2M3JOCB4DLXQNXLRSWV5JCQ: 8945 - NDD3JVIRQHHZJWWWDOIOY5LQUOEAQRD7JMQW6SA: 2762 - NCTIIHZ73QLZVVTO2SQ7HNJXBDCQ5C6GUPQKQLI: 7437 - NAI77TUBM4WDTVOBYNPBMOFQJT7ZVTFN4QFRIFY: 2860 - NDDHQPFNNLCBRVYAZTYHPIEWYSHGQ5GBCTM6NWA: 4256 - NBZ5TQQDPGVL3FKOYTCJEJCSQRFIISKHYI6E5KA: 2378 - NAVQCNAF3DBB473M4BQVTZPB76IJMTDRJ2XFZ2A: 108 - NDK66XOHWAP5YRZILNL2OYG5FLTME2ZSYUC5WNI: 4132 - NCPUBOEJXUFEKYBXZEUV55L72AQKCVNPENU5LTY: 5987 - NCOSQMYP3WLRXQPWUJ3L7DP6JV4LTXJPXG64KQY: 929 - NCALU7R7CMITG546NJ7PKNCATSXUUKTNGNRQA7A: 1316 - NCVP6LTJ6NNGIWHO6WJX76WLU2ICXEETLU4ZALI: 5782 - NBHIY25T5S3X4E7YDMQ5VU57LUWJMDMPCCZNFYQ: 1436 - NCQD6EM4HVW5PXZGJET24TOLMVX3GYKMFF7XNFY: 2286 - NAH4AJ6S3OJJ2DROPCPGZ2YPNMZ7UYKDDIDSJNQ: 9494 - NAUAP4S6SILS3TY2OIA5G7ETCOFX6CDLHW2K6LI: 9560 - NAN5XAV6Q7FPDSJ35KSF5GQS7IAKDJFFRUNR2NI: 6332 - transactions: - '16718_0': >- - A50000000000000037BA366E6DF12ACBE15133EE95F710D6E606BD9FF58DDF920E2F30865E21BF6800BD7D85829AC3084087B1E4A61BBD0F33CBA655171EC36BCB24704605990909D679B557BA90361EC249DEACDB87A526A19685893E05EE74D1BAA853C726DC570000000001684E41000000000000000001000000000000008014200000000000FA1C196DD264CFED001367656E6572617465646E616D65737061636530 - '16718_1': >- - A500000000000000E3C65AD56E35BDE464C084DF1DFDD13D1147CC31FC07F9208C312E84D0463D8A16888D4599BA52737D293896D5B78C9B4171690B3D2CB80B8C24A29C6CA07C0A69A712F5D5BACCE9469CD293DE66636C4D3C2ECFFAF29EAC944DFBB6F4098E5D0000000001684E410000000000000000010000000000000080142000000000002679627801FCA7E8001367656E6572617465646E616D65737061636531 - '16718_2': >- - A50000000000000081F1663515A9EEABAF7D095A2FBEC22FEE5B1E57F574C345282C20DC00EA64C88D245B571C6C23624E47B722A986E3435CE3821BA944E1CCC1AAAF4175AABE009B07191AFAB74F8D00F81955DB9441BC1F6844525E615EB213EE8A31CE01D83B0000000001684E41000000000000000001000000000000008014200000000000771D63B964B9A1A8001367656E6572617465646E616D65737061636532 - '16718_3': >- - A5000000000000004A349F6D4759B01276AEFC81B83D80625B91E6F8DD48AF096010A76863142AE79854AA2DEC7769247D0D438AFEB98AE2E72D36E2BFA69984E0358C64D2A09109F8E13BEC32A8A29306D898DD09ABB2F3124823E5403FD6823201124F487ECC7D0000000001684E4100000000000000000100000000000000801420000000000015C00ADD3564BFA6001367656E6572617465646E616D65737061636533 - '16718_4': >- - A5000000000000000E56D9CCD1FF10B796F25CD312AA87815725CED8E3DD4322273212A9411E36D994301B19ACABCC0B5B1ADE31A93481792F779FB295DAE9D32FEB091587BFCE0F1B9A766091F0FDD48C4B02A95FBA9FF0C19B8E5CBC4C6D5570A65DB7828B8FAF0000000001684E410000000000000000010000000000000080142000000000001D2B1990208375A7001367656E6572617465646E616D65737061636534 - '16718_5': >- - A5000000000000003A810D5E30E7A959B33584D79399AB12B02C8B55A5A17C514904219ECF8D375169CAC85BFD4793674B63D23E2ACE79BEF8FCF26B803B048C7DC3DE2647A5B008D18A0C53F1DC431BA22E9FD803BF9F2DC0B8B72C5DB97151D3F1691D419377B90000000001684E41000000000000000001000000000000008014200000000000039DD62B8AE95DE9001367656E6572617465646E616D65737061636535 - '16718_6': >- - A5000000000000004A7E1DEC957BE8594D15AF6FAC1866820E8C61D669A4211599AB725316B4597925A939F1AD48BD7F22F118DAEA561270AE6576834EF001E4501C287615D0B30BD6056D0219B6A4437029E730ACBF6DF46EE1866FBF94D2805FF6C5ED6D0A2B680000000001684E41000000000000000001000000000000008014200000000000FB2D63530F2918AE001367656E6572617465646E616D65737061636536 - '16718_7': >- - A5000000000000000874511B38BA220A7A6390897B98547C87220600F516B7DF15B6CD43A913681E0E9C311B52B5FD4D5E0BFBCC451A61A26BDE8D64BE061F099156A32BC2F6910618198FF20F37B4D966F49312B0A503EFAA62AB58F2E833AEFDB847C09953C83C0000000001684E41000000000000000001000000000000008014200000000000C76A930C9DDE74CD001367656E6572617465646E616D65737061636537 - '16718_8': >- - A5000000000000003F76945889AF68CB906C4B425168CD2B6F3FAD58CE1633065C5CDA929A24AC3FD9AD5EA1B07D848253DEDF5C1C406081E8311AE9C3F80BA3B1512559DEDFD108FD795299780DDA33B3D06F058E36DD1993EE0ECA4B8F56DB8BDBB59DEB512C5B0000000001684E410000000000000000010000000000000080142000000000001A7787A0305149FF001367656E6572617465646E616D65737061636538 - '16718_9': >- - A500000000000000939B2338FD117AA0CDFAEB1C09674F1B2078CFB61D7F06E5F9AB25C697C08F464A6F9A55B9E31D17DFD692B9CA09306F1871C540502D23CC0FBE0B8A7776A207613EC73F1F27F916C44F12DCE60E0EB01C5D78C00FD31A744FB24CEF4A9610C60000000001684E410000000000000000010000000000000080142000000000004D8ED29BA8334AC2001367656E6572617465646E616D65737061636539 - '16705_0': >- - 6002000000000000CF58F62D64EA3EEBEAC170E4DB25A29D32CF8822A8A6167EC85F5809A971E272342A4CF97D5408CDDFEF0148F935AABF283D8F1CADAF3FEBCCFBAD805A32750BB35FBCEE398CB89ED1A130100686C9AE9FEDB965AE73E62683E2CFF800D38CD5000000000168414100000000000000000100000000000000C45186C7555FA685A9F6AA931467D76EDB5485C52EE457090CB4D61DFA39060780000000000000008000000000000000B35FBCEE398CB89ED1A130100686C9AE9FEDB965AE73E62683E2CFF800D38CD5000000000168554101010300000000006880D649252A8F766E0BA736B43985209FB74C7B2CDBF7E16820AEBA691EAA1558AA97FFD68ADCAF184B0D0D7DA2F47768337923113C450526419B19249A9EDADDABEF065094C6130000000000000000A5FB2E60D0EE9B69FA181F2E05D6F273F44C6DD1DD72BBCC8D77406358ED52A4B7590F67C9AF509C68E80CD6BC259DA57FDBFC9BB308561111DBB2EF3B1D21CDF85F461AFFC0A52A0B759C654C890042BA4CE9A3EF109A234CEDCD79182CEE03000000000000000058874AD1A09AD2DC9F49C6C0212A8CC40DB528DCE171EDF170BB62C0A2262622A1B47FC11E18DC33786735675E0FD39A746AB3ADA1532B89F71729852700BA64A31F030EE67DA04C7D46B6D358F1C44A187F79B51307B44BDC285767188988020000000000000000C0B4649DEEDF5BA42FA37E13208DC808BBE32626376739CA46B07FDC52B199E2EEF38ED6A309079555D6881822648937B678B19F39980F623A83C422B682424466BA374F2AAB7620A6297A28612293790E418C5BFD4495809186F31E1B09E604 - '16705_1': >- - 6001000000000000877C1553835EB29C94483E8148BD668711A561C41F46E1735EC7ABA1E07F97BB88FADB128155D58102B041D544434538CECBBB5D81E4B53A421178A3BB1FD80602DA6228090E9B12A79C80AF3F1AC9958F1D5EF41DD79CFA03ADA09E568467B0000000000168414100000000000000000100000000000000D5E3C9C8C13AE7134BDF5C67669FA0450C8C3973DBAA00CC034EE6A3DA6BC5D05000000000000000500000000000000002DA6228090E9B12A79C80AF3F1AC9958F1D5EF41DD79CFA03ADA09E568467B000000000016855410101010000000000683545072CBA2350B528CB14860CC0456BF8045BF91C0E1100000000000000003FEAA8ADF69A2727539D2ED69EF76AF8E5155B14DA7049F49D30CF0B37CB629434C6616B9E2BFE5C522664BD9059EB90DF73700EB4D384ED7924BCE58390D4EA863CF2C7F56B26949685A112520494BACFC65534EDB96E7C1EA53E23B0FC3D05 - '16705_2': >- - E001000000000000064F2ECE7ABF398823E5E14BA5A98A81ACE2B14AE4A71CFBC51F82F713DACDBC711358B3F5EB324FB0BBA552A51C74B16C72D5CFC9E21DB797DBF4361677160C4AACA9307BC53A24B91990B65E978064BFFEBBDB0764C0BA61D343C4F8A6A6FB0000000001684141000000000000000001000000000000004E0FE6979486EFA84030DD496124FECEFFCEA0C6CFDD661EA731029C55A58F84680000000000000068000000000000004AACA9307BC53A24B91990B65E978064BFFEBBDB0764C0BA61D343C4F8A6A6FB00000000016855410101020000000000683E807D292F8E407C50823E23D0D1A3566DE49E0515C5106829152F977E45DE4A33406C774EE6837B1CC1129A8C6259000000000000000071748B073934B1A23032F9EFCCBD16842C899C803ABAB1760B7DE8D1AD0B1CC746B129C062D087820CD0CFCACEAA8C6368A3924AB11BF1D9675119C6927438F19E2684416040CDAF0A5C51A74FBDB7D8ECCA9297CA040BFA5D141A97B67FC50D0000000000000000D62CA2E2F996152E84243F95FA602CC80FD55E401FB6C401F039E0D0199BAC2DFE3358CF8BBAF8A7E1AB0AA62E2A1277F2D2FCCE1E5B7E7B91D32CB7421470888FB08368E33091A9AC45772AFE596E8BD23059FCA2A895B40C46A105C3D81700 - '16705_3': >- - 600100000000000041F50BE35EB02F0A1BB1D5B0B0FC88A23C41DA4A5C6CD6C14DB060E3491F8315980D7DF38AD42ABCA8C755F80ED7D6F2088831CD701638A89425267BF00EC70332575CE6A59542B703F9B1D6BC1EEC4A049D1D0C0C3960EF937CFFD813D6222F000000000168414100000000000000000100000000000000C72A76356DDDBA5A63270521FCEEA32A074AD8D55728697B69820FFFD0CBDA7A5000000000000000500000000000000032575CE6A59542B703F9B1D6BC1EEC4A049D1D0C0C3960EF937CFFD813D6222F000000000168554101010100000000006839A3990B9A1C8E3F2B2D290BF25142721258586526ED2F000000000000000005135B8AD56278A823A7808A8A4F0D85662B021E8E8FA1F8530F423CC60B9A8E6FBCFF53FAC4929477208DB4C03A110B9B3E2D0714EEA25FD7C7E6B4C793DF796A5393ED3CDE53410C2C7A730B4EE4D9268DEE1AF040A860257274075EE8DF01 - '16705_4': >- - 600100000000000021E4305B1DFD203E21EE430E636FFAE03BBA94FAE5E3A5553B461912B419B724D18CE97F069905456D27E61CB694F4227B0E815D1D6C7F1C618D627C280D51015B8C3EC3027504D2E87AE58A46B73699733C479A8F2484F915B51B8A1057F2960000000001684141000000000000000001000000000000009036905964DA96F4D956D4C8D653913028A78D844C2C02FECC3753F1A1347B4F500000000000000050000000000000005B8C3EC3027504D2E87AE58A46B73699733C479A8F2484F915B51B8A1057F2960000000001685541010101000000000068A57C7130D42F0D7D4C358566BE2FDF3DF9055D943A89C80000000000000000FE90EADF68A37EE0529D947E2369C2FA6A701A8D128C89DB9008BC3ADF7732C65DD8A4C193A9E1F92237AC537FE1526C9E62E44E3B3DE401F8A386D440BA3580DFB4590EB15A7C99BE39E332B477D4A94B468D54B8271AEF21056C9F0E61640B - '16705_5': >- - 600100000000000090D9813482A36B6150C3794F25C59652892D24EB7FA16B3A91DDF38048C67BDA413D7475AA7284B489D4A9B5DED3004017555DEA8EF74682D7AB5B153EF14703AEB4163E46417F3BC1CB534DDC2DC512DA7090F111236E56FDEAD766F72FD0ED000000000168414100000000000000000100000000000000DED91B8E04912275FE5132F70832ACD634FBEEC8868F81387F619E056C6FDC3D50000000000000005000000000000000AEB4163E46417F3BC1CB534DDC2DC512DA7090F111236E56FDEAD766F72FD0ED0000000001685541010101000000000068746C98F2337AFD5093A6EDDB53730211E9472AFA31A11D000000000000000094917E3BCE9402B2C38A380F7A35D06EC47C1586F5903B052C0672659FBF4FDD3CC857B11CB08C80AE7BD3EAC3F1A310F5DE240695CEA32C200A164221140117E475BE181C7CAA584B939A58440F22269CF5A64A7E1FD844454D07676BB4DD01 - '16705_6': >- - 60020000000000002C8446CE0CCE5FD33B6F0330C247954372594C18028872CDFC2CA142317894CA2911B0B64031A55AF989AD753EADC6C944E23724B5FE4B1E78704AE9FCF6790A441977BDC8CA03DCAF6B2A8BE5CBFF25B8D8F75E2CB294C2E1178697DEF33D170000000001684141000000000000000001000000000000001164975F08B29AB27782C5CFF774145F4FAF4321848E06762E87E8CAA7CDD2DC80000000000000008000000000000000441977BDC8CA03DCAF6B2A8BE5CBFF25B8D8F75E2CB294C2E1178697DEF33D170000000001685541010103000000000068A6DCACBB8396087FFB38AF0767653CBB1A32F11E2B7BD368D7D2C04F73E1C36438AC2321ABADADE5B19E8838B94C5B6848E25A3BA86E08EBAF4066343BF1778DAEA645B8F2A87A00000000000000007B6851132195A1E90CED28D7EBF76F8C2B4349F7243B333A284E7F0A29399883B3758C7EF1A94A38DD8C147306B5CA6DEAE6BA06DBE1204B062CE29A2C3657EBC6D8702A494BAB0192011BA90132BB229B9784D62EBB156776FF02B51CCCEA00000000000000000077F400281357D7BB8B270FE6A8B6F64D954B19B72352BF8163F8C2CA9149C2F70315BE37048C67311A85A700955B39664A60DBA7506B2E89B23153AEE1E19699A51DACA6C4CDCDBA3956651D011B9E53314116781216CEFBBFBCA855577E360E0000000000000000F8BD4BDB6D644B4861B00CF75F4A1EABC531164D26696A41E2988BE56DE254475BC08E7971C6912D85F03DB42C3C1CCEE1335FDD27A402D0729C7B01AF3F7D9667DA8841933266F7D655F9CA08C5DEC59C27E27D7A76DC4D660E10B69EEE2F06 - '16705_7': >- - E001000000000000E3DA3C27B97F6AED600AC786163AB3CE74E30E9B613E8C886781924E0414F0A426BA5796A415FA25F49F1144AC289F8909DBF53E0834FED5E61D4E25BC651707DD7ABECC03A43CCA980322EF7839477254F5407053C4AA943647A571F3E00A1E00000000016841410000000000000000010000000000000073780F4FBBE222D6CB4DF037053C49A93A83F28A65905918018E7D05DB7973D368000000000000006800000000000000DD7ABECC03A43CCA980322EF7839477254F5407053C4AA943647A571F3E00A1E00000000016855410101020000000000683C46CCD4BB7F9DEEA244A7AAD9F2D836B1B84A37A018A068BCB750719392431AD9A780D138D443E431AA361292CF360000000000000000B3F7F28674E73F53B67FAE13FCEDFE1BE4F7ECA87A1329759727A5C3AA3AADD6C134A0EB46FD2E34269EF275CB2B431A84A22CE9BA5A7A99001B1CEFAACD8BD5A7D7BF897B8AA23986767EAA481B552B3B520DACD3FE32451CCCDEDB1EB4AF080000000000000000A867DAF9F520FFE4079A89814C323FF0A0410CD22E9DF5482E3AB7417504823CFC0332124A1497DDB8357B53680DC1161F356F374EEAFCA90F59363B90C8DB59EB01EA730778CD5B190EB0BC9099BEA7FBF9C9653A780753B9CBCDDC710D4603 - '16705_8': >- - E0010000000000003263A49588E8B23CD89FACBA1EDECC8B1E0B367D0997AB0C6A0E7AD47DFBF7316B32EA7036B01C573F8A7EC754511A12D2A4BBE6D54DF3B33B74CFF656CFBA06A34C5324B5B59783EF7D5E81F1DB22DD1595CEBA10821E34FAB3158759E64555000000000168414100000000000000000100000000000000A77293CF0486E5FE0DBC44AE20A755D9D0389D964F69E0608D5E3066A486F7C668000000000000006800000000000000A34C5324B5B59783EF7D5E81F1DB22DD1595CEBA10821E34FAB3158759E6455500000000016855410101020000000000689A72575EA9C077314F07D217A6437616D2AA70177AFA8D6869DA890D77BEAB53B7F1F15F1E423E370F865E7F74CC510000000000000000C010F6B21C9FD6CB4CC371378325CCAF5A76D94C49320EC802BE5C54E874F3F51E4A3D54BFDAFF314ADE274113C62D1CC060165F9D221D59A7E3C139B5C3BEF3CE5BA945C41706576557D19030EB196A4E1D1C6F00D17B0987DC0558F55AA5050000000000000000C89586B8E7AC7F0DC3642CFFA1DD13547C3B2EF1C266DA60C5575F1A9E295636BFDB3AB42C8F6E9F9FF7FD78F0CF502BAE00B1FC16FE1F0A01964A989512A0350ED25DFDE1BB7D3C0483E4A8275CC9CB457EA3E956120089334A1BE86734F90F - '16705_9': >- - 6001000000000000891DF2D79A4DC79F83C18CD7E872599A1D0B6461B49A872ECBB9B46C9BDC6115BA0F84AAAC7AC62182D3580A25C493A778D19293630C36DC95CD820682EC800F4AE57866055139BE1215D82340D45767E53E42DE45420FD7A8D137F2197850AA0000000001684141000000000000000001000000000000004535427152C4A68C45B2C56F6421591255CD85C9D8F45CB9E8C03CC2B63D6CDC500000000000000050000000000000004AE57866055139BE1215D82340D45767E53E42DE45420FD7A8D137F2197850AA00000000016855410101010000000000682592D94BEA359517AF9007C4B3B62AC69C70E4837FD8CA000000000000000077178347C86B7771C323DE39A64E790519B8EBD779E93FD6C70D458ABCA62387DB6B181DFA85EBB713961C2F05E25425193AC2FD363C2977BC12CA14BEE5C97612616FEA7E4305AC0CE2A17744F5783D35959E2AA417B98B932AC4FC1FB3980C - '16963_0': >- - A1000000000000005F785913E49DC6B27671FBB88F4D6F055BF7C1570A0F402FE7C5299B6BF8B9F6EBDD676EAA06A55B6E64DD282BFCDAB3A229EC31693F81AB7BA2F5B4BAFD0102FDC8949B942EAA439491D2B50063FC2B252BCC9A48AA3A6CC70C48E47D24AEA90000000001684342000000000000000001000000000000008D29972A1B9682A10E1F938A86B43E69EB861BB3D40B2738E25B6B0A1124148701 - '16963_1': >- - A100000000000000A0CE1F0680B60F9627817B68639D004EA59A88F78417264609EA4525A419AD06331DF6F7CC627D08A5EB7B866531B6632D204A943339918B0DEB60A393EA130575D7D7AED9306A90715514DBE87A5B148E4997B35E654BABCF1381C22D13C7190000000001684342000000000000000001000000000000006DD6ECD10497B7D24B3127F444B8C74BE696082C967A7CF9CF0401B04B7E1E2C01 - '16963_2': >- - A1000000000000003F9A1EC0673271669F726E8CBC98A6E206C42FE60FF4741D0F06C84722EF74A69FA55D499C209169151D98CA883AAD64157AEA252FECA4EC525D650A729FB50E88D3BFE448EC804BDBADC99644087FBC6273560D0F87816A032A86BD7742DC4C000000000168434200000000000000000100000000000000C503985BE52B9FEA00B1F1FB5BC9C12BBC32CD0864C0966AF6F5C15CA7A4DD3301 - '16963_3': >- - A100000000000000634DA90166BCD1B6BD11C81D28AC3F562BADF2E6C47FD29CA1DC15EF4686659496DC841FBF57A1B6FB89B3C1BC8FE009C2BBAC1BBADC4A92EBC499CD4A8A220DD9A52B36E2182BCBDF6F2B360A842DFD2738466422EC3EE8F9437F3B0981AA110000000001684342000000000000000001000000000000004275F08693B7F8F85C021AAA38D4C7641518A6C0C0CAAD078EF7217F876A8C6301 - '16963_4': >- - A100000000000000CAEE7FABAE19062BB75917533B589A33540EC0DB4D15DE8E4DBFE1A4059C75CA5B642E1845333F08ED718536A9FB09317813FF9936D013C6E282AB4A6934310996CA4C40552D6D2BF21E3A9215DB4ADA6341523D59996CF62054BA469B93222700000000016843420000000000000000010000000000000002B37AE4FAAC98B9746A1226323834D416CBA881A004BA1E89A03546DD75DA5201 - '16963_5': >- - A1000000000000001F81E4AF6FE835E07CB222C2F892FFBC35A7137A6556002B15E3F93F9125A93FC8B2CD9BDF96A8CF40B0E1D7F0A0B21E29FAC95862BFB8DB8D654E980F41070AE0551969FECCFBCF5539ADC9DF5C91C542AECA17AEE7CC4C07ADC678D4D9242B0000000001684342000000000000000001000000000000004F8795E39F39A9BD1DCD78DB264E9CE1F2CE1B691389BF7BFF563FA2F9B0ED6501 - '16963_6': >- - A1000000000000000CBCBB2985865456F24282793AA42E00D4116E0401092BD4830C42545D38F63D3B4C3564F71D6AB6F0E5DD1D4F83C66D60D6F8D637C10FFDA7C264E272AEFA0A0B124DB144C4C2E54862604EED631B4BAE495E54E422C20D01DB635D2E2EBE1600000000016843420000000000000000010000000000000029146942E24D3D63713CE17BC2C420AA765A8E2FFC0BEE95CC5E6737323D1F2001 - '16963_7': >- - A100000000000000882FA8D2C6A76CCFDA77546CB45A8FD6988360D61D8F32AC7BA599E3E4B89E664A966BC0AA00FCCF18B12F1F974B61307B7940445629272B1B92E7EF528ACD0B8811139E5F01022A6952FA534ACC07728EE2BDADC97D973898576D777F2DE727000000000168434200000000000000000100000000000000DFC6ECE1C959F8C94066CB4A125173E9EFCDB0A127B1365900E34ECE4B650E2A01 - '16963_8': >- - A100000000000000BD8DAE61C576CE5F5441D3333C3D75E61ADD0D4EFFB80AC2104A745913FC530271652231EE2830044FF3DFE5C19B33E11D7DC99D51E31EAF5BBF0D26CC2A160EC4954DE2530AFEB9DD015028148F9D1788FC0D9D6F88BE439A971070BF6E17DC00000000016843420000000000000000010000000000000041F24B50E1D7F44C19EFB2C659409D74BF2E7E4E0D88E39799F97D95A13C2D7C01 - '16963_9': >- - A100000000000000770633580EAE0F493099D4BF63AEFA0D65EEA831EF175FAB8639F7D38D2F34117335F03FB1630C17ED52AE592A6BAE56DA7B1C8A8BEEBD449965B8BB7144AA0A035D8EF814FBE18DDEEA35D33530D4955A7DDCA093A6210DCF1ED19A5D6D68EA000000000168434200000000000000000100000000000000D4DBAB2060E71A55ACE629533FCC3B9EF892FAE35B66778D4726CFB6D3F6C9C501 -harvestNetworkFeeSinkAddress: NDUEQPQT6YDSI7HI3FR65WAQEQ2YLQAZIWONRAI -mosaicRentalFeeSinkAddress: NDUEQPQT6YDSI7HI3FR65WAQEQ2YLQAZIWONRAI -namespaceRentalFeeSinkAddress: NDUEQPQT6YDSI7HI3FR65WAQEQ2YLQAZIWONRAI -networkType: 104 -nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6 -blockGenerationTargetTime: 30s -maxNamespaceDuration: 730d diff --git a/test/override-currency-preset.yml b/test/override-currency-preset.yml deleted file mode 100644 index b1a1fd5bc..000000000 --- a/test/override-currency-preset.yml +++ /dev/null @@ -1,3 +0,0 @@ -nemesis: - mosaics: - - accounts: 20 diff --git a/test/reports/bootstrap-voting/api-node-0-config.csv b/test/reports/bootstrap-voting/api-node-0-config.csv deleted file mode 100644 index 5b4de25fe..000000000 --- a/test/reports/bootstrap-voting/api-node-0-config.csv +++ /dev/null @@ -1,434 +0,0 @@ -symbol-bootstrap-version; CURRENT_VERSION - -config-database.properties -database -databaseUri; mongodb://db-0:27017 -databaseName; catapult -maxWriterThreads; 8 -maxDropBatchSize; 10 -writeTimeout; 10m - -plugins -catapult.mongo.plugins.accountlink; true -catapult.mongo.plugins.aggregate; true -catapult.mongo.plugins.lockhash; true -catapult.mongo.plugins.locksecret; true -catapult.mongo.plugins.metadata; true -catapult.mongo.plugins.mosaic; true -catapult.mongo.plugins.multisig; true -catapult.mongo.plugins.namespace; true -catapult.mongo.plugins.restrictionaccount; true -catapult.mongo.plugins.restrictionmosaic; true -catapult.mongo.plugins.transfer; true - - -config-extensions-broker.properties -extensions -extension.addressextraction; true -extension.mongo; true -extension.zeromq; true -extension.hashcache; true - - -config-extensions-recovery.properties -extensions -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.filespooling; true -extension.hashcache; true - - -config-extensions-server.properties -extensions -extension.filespooling; true -extension.partialtransaction; true -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.harvesting; false -extension.syncsource; false -extension.diagnostics; true -extension.finalization; true -extension.hashcache; true -extension.networkheight; false -extension.nodediscovery; true -extension.packetserver; true -extension.pluginhandlers; true -extension.sync; true -extension.timesync; true -extension.transactionsink; true -extension.unbondedpruning; true - - -config-finalization.properties -finalization -enableVoting; false -enableRevoteOnBoot; true -size; 10'000 -threshold; 7'000 -stepDuration; 4m -shortLivedCacheMessageDuration; 10m -messageSynchronizationMaxResponseSize; 20MB -maxHashesPerPoint; 256 -prevoteBlocksMultiple; 4 -unfinalizedBlocksDuration; 8m - - -config-inflation.properties -inflation -starting-at-height-1; 0 -starting-at-height-10000; 0 - - -config-logging-broker.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_broker%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-recovery.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_recovery%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-server.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_server%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-messaging.properties -messaging -subscriberPort; 7902 -listenInterface; 0.0.0.0 - - -config-network.properties -network -identifier; public-test; NetworkIdentifier; Network identifier. -nemesisSignerPublicKey; DA007A7CCA877805DF0DD6250C9806E7B25DC3ED21E506569239D11A7175101A; Key; Nemesis public key. -nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. -generationHashSeed; 6AF8E35BBC7AC341E7931B39E2C9A591EDBE9F9111996053E6771D48E9C53B31; ; -epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. - -chain -enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. -enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. -currencyMosaicId; 0x3A39'4A5A'4739'A3D0; MosaicId; Mosaic id used as primary chain currency. -harvestingMosaicId; 0x5D21'03FE'AFEF'E767; MosaicId; Mosaic id used to provide harvesting ability. -blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. -blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. -importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. -importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. -maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. -maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. -defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. -maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. -maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. -initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. -maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. -totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. -minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. -votingSetGrouping; 180; ; -maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. -minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. -maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. -harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. -harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. -harvestNetworkFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the harvest network fee sink account. -maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - -plugin:catapult.plugins.accountlink -dummy; to trigger plugin load - -plugin:catapult.plugins.aggregate -maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. -maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. -enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. -enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. -maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - -plugin:catapult.plugins.lockhash -lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. -maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - -plugin:catapult.plugins.locksecret -maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. -minProofSize; 20; uint16_t; Minimum size of a proof in bytes. -maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - -plugin:catapult.plugins.metadata -maxValueSize; 1024; uint16_t; Maximum metadata value size. - -plugin:catapult.plugins.mosaic -maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. -maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. -maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. -mosaicRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the mosaic rental fee sink account. -mosaicRentalFee; 500; Amount; Mosaic rental fee. - -plugin:catapult.plugins.multisig -maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. -maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. -maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - -plugin:catapult.plugins.namespace -maxNameSize; 64; uint8_t; Maximum namespace name size. -maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. -maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. -minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. -maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. -namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. -reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. -namespaceRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the namespace rental fee sink account. -rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. -childNamespaceRentalFee; 100; Amount; Child namespace rental fee. - -plugin:catapult.plugins.restrictionaccount -maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. - -plugin:catapult.plugins.restrictionmosaic -maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - -plugin:catapult.plugins.transfer -maxMessageSize; 1024; uint16_t; Maximum transaction message size. - - -config-node.properties -node -port; 7900; unsigned short; Server port. -maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. -enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. -enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. -enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. -enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. -fileDatabaseBatchSize; 1; ; -enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. -transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. -maxHashesPerSyncAttempt; 370; ; -maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. -maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. -shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. -shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. -shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. -shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. -minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. -maxTimeBehindPullTransactionsStart; 5m; ; -transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. -unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. -unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. -connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. -syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. -socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). -socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. -maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. -blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. -blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. -blockDisruptorMaxMemorySize; 300MB; ; -transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. -transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. -transactionDisruptorMaxMemorySize; 20MB; ; -enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. -enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. -maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. -minPartnerNodeVersion; 1.0.0.0; ; -maxPartnerNodeVersion; 1.0.255.255; ; -trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. -localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. -listenInterface; 0.0.0.0; ; - -cache_database -enableStatistics; false -maxOpenFiles; 0 -maxBackgroundThreads; 0 -maxSubcompactionThreads; 0 -blockCacheSize; 0MB -memtableMemoryBudget; 0MB -maxWriteBatchSize; 5MB - -localnode -host; api-node-0; string; Node host (leave empty to auto-detect IP). -friendlyName; my-api-node-0; string; Node friendly name (leave empty to use address). -version; 1.0.1.0; uint32_t; Node version. -roles; Api; ionet::NodeRoles; Node roles. - -outgoing_connections -maxConnections; 10; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - -incoming_connections -maxConnections; 512; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. -backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - -banning -defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. -maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. -keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. -maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. -numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). -readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. -maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. -minTransactionFailuresCountForBan; 8; ; -minTransactionFailuresPercentForBan; 10; ; - - -config-pt.properties -partialtransactions -cacheMaxResponseSize; 5MB -cacheMaxSize; 20MB - - -config-task.properties -logging task -startDelay; 1m -repeatDelay; 10m - -connect peers task for service Finalization -startDelay; 2s -repeatDelay; 1m - -finalization task -startDelay; 2m -repeatDelay; 15s - -pull finalization messages task -startDelay; 3s -repeatDelay; 1s - -pull finalization proof task -startDelay; 10s -repeatDelay; 50s - -harvesting task -startDelay; 30s -repeatDelay; 1s - -network chain height detection -startDelay; 1s -repeatDelay; 15s - -node discovery peers task -startDelay; 1m -minDelay; 1m -maxDelay; 10m -numPhaseOneRounds; 10 -numTransitionRounds; 20 - -node discovery ping task -startDelay; 2m -repeatDelay; 5m - -age peers task for service Readers -startDelay; 1m -repeatDelay; 1m - -batch partial transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Pt -startDelay; 3s -repeatDelay; 1m - -pull partial transactions task -startDelay; 10s -repeatDelay; 3s - -batch transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Sync -startDelay; 1s -repeatDelay; 1m - -pull unconfirmed transactions task -startDelay; 4s -repeatDelay; 3s - -synchronizer task -startDelay; 3s -repeatDelay; 3s - -time synchronization task -startDelay; 1m -minDelay; 3m -maxDelay; 180m -numPhaseOneRounds; 5 -numTransitionRounds; 10 - -static node refresh task -startDelay; 5ms -minDelay; 15s -maxDelay; 24h -numPhaseOneRounds; 20 -numTransitionRounds; 20 - - -config-timesync.properties -timesynchronization -maxNodes; 20 -minImportance; 3'750 - - -config-user.properties -account -enableDelegatedHarvestersAutoDetection; true - -storage -seedDirectory; ./seed -certificateDirectory; ./cert -dataDirectory; ./data -pluginsDirectory; /usr/catapult/lib -votingKeysDirectory; ./votingkeys diff --git a/test/reports/bootstrap-voting/api-node-0-config.rst b/test/reports/bootstrap-voting/api-node-0-config.rst deleted file mode 100644 index d87de9df7..000000000 --- a/test/reports/bootstrap-voting/api-node-0-config.rst +++ /dev/null @@ -1,453 +0,0 @@ -Symbol Bootstrap Version: CURRENT_VERSION - -config-database.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **database**; - databaseUri; mongodb://db-0:27017 - databaseName; catapult - maxWriterThreads; 8 - maxDropBatchSize; 10 - writeTimeout; 10m - **plugins**; - catapult.mongo.plugins.accountlink; true - catapult.mongo.plugins.aggregate; true - catapult.mongo.plugins.lockhash; true - catapult.mongo.plugins.locksecret; true - catapult.mongo.plugins.metadata; true - catapult.mongo.plugins.mosaic; true - catapult.mongo.plugins.multisig; true - catapult.mongo.plugins.namespace; true - catapult.mongo.plugins.restrictionaccount; true - catapult.mongo.plugins.restrictionmosaic; true - catapult.mongo.plugins.transfer; true - -config-extensions-broker.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; true - extension.mongo; true - extension.zeromq; true - extension.hashcache; true - -config-extensions-recovery.properties -===================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.filespooling; true - extension.hashcache; true - -config-extensions-server.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.filespooling; true - extension.partialtransaction; true - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.harvesting; false - extension.syncsource; false - extension.diagnostics; true - extension.finalization; true - extension.hashcache; true - extension.networkheight; false - extension.nodediscovery; true - extension.packetserver; true - extension.pluginhandlers; true - extension.sync; true - extension.timesync; true - extension.transactionsink; true - extension.unbondedpruning; true - -config-finalization.properties -============================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **finalization**; - enableVoting; false - enableRevoteOnBoot; true - size; 10'000 - threshold; 7'000 - stepDuration; 4m - shortLivedCacheMessageDuration; 10m - messageSynchronizationMaxResponseSize; 20MB - maxHashesPerPoint; 256 - prevoteBlocksMultiple; 4 - unfinalizedBlocksDuration; 8m - -config-inflation.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **inflation**; - starting-at-height-1; 0 - starting-at-height-10000; 0 - -config-logging-broker.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_broker%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-recovery.properties -================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_recovery%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-server.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_server%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-messaging.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **messaging**; - subscriberPort; 7902 - listenInterface; 0.0.0.0 - -config-network.properties -========================= -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **network**; ; ; - identifier; public-test; NetworkIdentifier; Network identifier. - nemesisSignerPublicKey; DA007A7CCA877805DF0DD6250C9806E7B25DC3ED21E506569239D11A7175101A; Key; Nemesis public key. - nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. - generationHashSeed; 6AF8E35BBC7AC341E7931B39E2C9A591EDBE9F9111996053E6771D48E9C53B31; ; - epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. - **chain**; ; ; - enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. - enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. - currencyMosaicId; 0x3A39'4A5A'4739'A3D0; MosaicId; Mosaic id used as primary chain currency. - harvestingMosaicId; 0x5D21'03FE'AFEF'E767; MosaicId; Mosaic id used to provide harvesting ability. - blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. - blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. - importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. - importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. - maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. - maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. - defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. - maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. - maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. - initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. - maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. - totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. - minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. - votingSetGrouping; 180; ; - maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. - minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. - maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. - harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. - harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. - harvestNetworkFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the harvest network fee sink account. - maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - **plugin:catapult.plugins.accountlink**; - dummy; to trigger plugin load - **plugin:catapult.plugins.aggregate**; ; ; - maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. - maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. - enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. - enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. - maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - **plugin:catapult.plugins.lockhash**; ; ; - lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. - maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - **plugin:catapult.plugins.locksecret**; ; ; - maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. - minProofSize; 20; uint16_t; Minimum size of a proof in bytes. - maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - **plugin:catapult.plugins.metadata**; ; ; - maxValueSize; 1024; uint16_t; Maximum metadata value size. - **plugin:catapult.plugins.mosaic**; ; ; - maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. - maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. - maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. - mosaicRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the mosaic rental fee sink account. - mosaicRentalFee; 500; Amount; Mosaic rental fee. - **plugin:catapult.plugins.multisig**; ; ; - maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. - maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. - maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - **plugin:catapult.plugins.namespace**; ; ; - maxNameSize; 64; uint8_t; Maximum namespace name size. - maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. - maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. - minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. - maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. - namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. - reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. - namespaceRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the namespace rental fee sink account. - rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. - childNamespaceRentalFee; 100; Amount; Child namespace rental fee. - **plugin:catapult.plugins.restrictionaccount**; ; ; - maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. - **plugin:catapult.plugins.restrictionmosaic**; ; ; - maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - **plugin:catapult.plugins.transfer**; ; ; - maxMessageSize; 1024; uint16_t; Maximum transaction message size. - -config-node.properties -====================== -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **node**; ; ; - port; 7900; unsigned short; Server port. - maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. - enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. - enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. - enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. - enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. - fileDatabaseBatchSize; 1; ; - enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. - transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. - maxHashesPerSyncAttempt; 370; ; - maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. - maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. - shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. - shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. - shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. - shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. - minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. - maxTimeBehindPullTransactionsStart; 5m; ; - transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. - unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. - unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. - connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. - syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. - socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). - socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. - maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. - blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. - blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. - blockDisruptorMaxMemorySize; 300MB; ; - transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. - transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. - transactionDisruptorMaxMemorySize; 20MB; ; - enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. - enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. - maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. - minPartnerNodeVersion; 1.0.0.0; ; - maxPartnerNodeVersion; 1.0.255.255; ; - trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. - localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. - listenInterface; 0.0.0.0; ; - **cache_database**; - enableStatistics; false - maxOpenFiles; 0 - maxBackgroundThreads; 0 - maxSubcompactionThreads; 0 - blockCacheSize; 0MB - memtableMemoryBudget; 0MB - maxWriteBatchSize; 5MB - **localnode**; ; ; - host; api-node-0; string; Node host (leave empty to auto-detect IP). - friendlyName; my-api-node-0; string; Node friendly name (leave empty to use address). - version; 1.0.1.0; uint32_t; Node version. - roles; Api; ionet::NodeRoles; Node roles. - **outgoing_connections**; ; ; - maxConnections; 10; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - **incoming_connections**; ; ; - maxConnections; 512; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - **banning**; ; ; - defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. - maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. - keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. - maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. - numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). - readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. - maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. - minTransactionFailuresCountForBan; 8; ; - minTransactionFailuresPercentForBan; 10; ; - -config-pt.properties -==================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **partialtransactions**; - cacheMaxResponseSize; 5MB - cacheMaxSize; 20MB - -config-task.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **logging task**; - startDelay; 1m - repeatDelay; 10m - **connect peers task for service Finalization**; - startDelay; 2s - repeatDelay; 1m - **finalization task**; - startDelay; 2m - repeatDelay; 15s - **pull finalization messages task**; - startDelay; 3s - repeatDelay; 1s - **pull finalization proof task**; - startDelay; 10s - repeatDelay; 50s - **harvesting task**; - startDelay; 30s - repeatDelay; 1s - **network chain height detection**; - startDelay; 1s - repeatDelay; 15s - **node discovery peers task**; - startDelay; 1m - minDelay; 1m - maxDelay; 10m - numPhaseOneRounds; 10 - numTransitionRounds; 20 - **node discovery ping task**; - startDelay; 2m - repeatDelay; 5m - **age peers task for service Readers**; - startDelay; 1m - repeatDelay; 1m - **batch partial transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Pt**; - startDelay; 3s - repeatDelay; 1m - **pull partial transactions task**; - startDelay; 10s - repeatDelay; 3s - **batch transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Sync**; - startDelay; 1s - repeatDelay; 1m - **pull unconfirmed transactions task**; - startDelay; 4s - repeatDelay; 3s - **synchronizer task**; - startDelay; 3s - repeatDelay; 3s - **time synchronization task**; - startDelay; 1m - minDelay; 3m - maxDelay; 180m - numPhaseOneRounds; 5 - numTransitionRounds; 10 - **static node refresh task**; - startDelay; 5ms - minDelay; 15s - maxDelay; 24h - numPhaseOneRounds; 20 - numTransitionRounds; 20 - -config-timesync.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **timesynchronization**; - maxNodes; 20 - minImportance; 3'750 - -config-user.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **account**; - enableDelegatedHarvestersAutoDetection; true - **storage**; - seedDirectory; ./seed - certificateDirectory; ./cert - dataDirectory; ./data - pluginsDirectory; /usr/catapult/lib - votingKeysDirectory; ./votingkeys diff --git a/test/reports/bootstrap-voting/peer-node-0-config.csv b/test/reports/bootstrap-voting/peer-node-0-config.csv deleted file mode 100644 index a2942d7f2..000000000 --- a/test/reports/bootstrap-voting/peer-node-0-config.csv +++ /dev/null @@ -1,444 +0,0 @@ -symbol-bootstrap-version; CURRENT_VERSION - -config-database.properties -database -databaseUri; mongodb://:27017 -databaseName; catapult -maxWriterThreads; 8 -maxDropBatchSize; 10 -writeTimeout; 10m - -plugins -catapult.mongo.plugins.accountlink; true -catapult.mongo.plugins.aggregate; true -catapult.mongo.plugins.lockhash; true -catapult.mongo.plugins.locksecret; true -catapult.mongo.plugins.metadata; true -catapult.mongo.plugins.mosaic; true -catapult.mongo.plugins.multisig; true -catapult.mongo.plugins.namespace; true -catapult.mongo.plugins.restrictionaccount; true -catapult.mongo.plugins.restrictionmosaic; true -catapult.mongo.plugins.transfer; true - - -config-extensions-broker.properties -extensions -extension.addressextraction; true -extension.mongo; true -extension.zeromq; true -extension.hashcache; true - - -config-extensions-recovery.properties -extensions -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.filespooling; true -extension.hashcache; true - - -config-extensions-server.properties -extensions -extension.filespooling; false -extension.partialtransaction; false -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.harvesting; true -extension.syncsource; true -extension.diagnostics; true -extension.finalization; true -extension.hashcache; true -extension.networkheight; false -extension.nodediscovery; true -extension.packetserver; true -extension.pluginhandlers; true -extension.sync; true -extension.timesync; true -extension.transactionsink; true -extension.unbondedpruning; true - - -config-finalization.properties -finalization -enableVoting; true -enableRevoteOnBoot; true -size; 10'000 -threshold; 7'000 -stepDuration; 4m -shortLivedCacheMessageDuration; 10m -messageSynchronizationMaxResponseSize; 20MB -maxHashesPerPoint; 256 -prevoteBlocksMultiple; 4 -unfinalizedBlocksDuration; 0m - - -config-harvesting.properties -harvesting -harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. -harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. -enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. -maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. -delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. -beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. - - -config-inflation.properties -inflation -starting-at-height-1; 0 -starting-at-height-10000; 0 - - -config-logging-broker.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_broker%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-recovery.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_recovery%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-server.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_server%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-messaging.properties -messaging -subscriberPort; 7902 -listenInterface; 0.0.0.0 - - -config-network.properties -network -identifier; public-test; NetworkIdentifier; Network identifier. -nemesisSignerPublicKey; DA007A7CCA877805DF0DD6250C9806E7B25DC3ED21E506569239D11A7175101A; Key; Nemesis public key. -nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. -generationHashSeed; 6AF8E35BBC7AC341E7931B39E2C9A591EDBE9F9111996053E6771D48E9C53B31; ; -epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. - -chain -enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. -enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. -currencyMosaicId; 0x3A39'4A5A'4739'A3D0; MosaicId; Mosaic id used as primary chain currency. -harvestingMosaicId; 0x5D21'03FE'AFEF'E767; MosaicId; Mosaic id used to provide harvesting ability. -blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. -blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. -importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. -importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. -maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. -maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. -defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. -maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. -maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. -initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. -maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. -totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. -minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. -votingSetGrouping; 180; ; -maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. -minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. -maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. -harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. -harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. -harvestNetworkFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the harvest network fee sink account. -maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - -plugin:catapult.plugins.accountlink -dummy; to trigger plugin load - -plugin:catapult.plugins.aggregate -maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. -maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. -enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. -enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. -maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - -plugin:catapult.plugins.lockhash -lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. -maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - -plugin:catapult.plugins.locksecret -maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. -minProofSize; 20; uint16_t; Minimum size of a proof in bytes. -maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - -plugin:catapult.plugins.metadata -maxValueSize; 1024; uint16_t; Maximum metadata value size. - -plugin:catapult.plugins.mosaic -maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. -maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. -maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. -mosaicRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the mosaic rental fee sink account. -mosaicRentalFee; 500; Amount; Mosaic rental fee. - -plugin:catapult.plugins.multisig -maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. -maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. -maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - -plugin:catapult.plugins.namespace -maxNameSize; 64; uint8_t; Maximum namespace name size. -maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. -maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. -minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. -maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. -namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. -reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. -namespaceRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the namespace rental fee sink account. -rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. -childNamespaceRentalFee; 100; Amount; Child namespace rental fee. - -plugin:catapult.plugins.restrictionaccount -maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. - -plugin:catapult.plugins.restrictionmosaic -maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - -plugin:catapult.plugins.transfer -maxMessageSize; 1024; uint16_t; Maximum transaction message size. - - -config-node.properties -node -port; 7900; unsigned short; Server port. -maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. -enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. -enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. -enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. -enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. -fileDatabaseBatchSize; 1; ; -enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. -transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. -maxHashesPerSyncAttempt; 370; ; -maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. -maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. -shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. -shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. -shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. -shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. -minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. -maxTimeBehindPullTransactionsStart; 5m; ; -transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. -unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. -unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. -connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. -syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. -socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). -socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. -maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. -blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. -blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. -blockDisruptorMaxMemorySize; 300MB; ; -transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. -transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. -transactionDisruptorMaxMemorySize; 20MB; ; -enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. -enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. -maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. -minPartnerNodeVersion; 1.0.0.0; ; -maxPartnerNodeVersion; 1.0.255.255; ; -trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. -localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. -listenInterface; 0.0.0.0; ; - -cache_database -enableStatistics; false -maxOpenFiles; 0 -maxBackgroundThreads; 0 -maxSubcompactionThreads; 0 -blockCacheSize; 0MB -memtableMemoryBudget; 0MB -maxWriteBatchSize; 5MB - -localnode -host; peer-node-0; string; Node host (leave empty to auto-detect IP). -friendlyName; my-peer-node-0; string; Node friendly name (leave empty to use address). -version; 1.0.1.0; uint32_t; Node version. -roles; Peer,Voting; ionet::NodeRoles; Node roles. - -outgoing_connections -maxConnections; 10; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - -incoming_connections -maxConnections; 512; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. -backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - -banning -defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. -maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. -keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. -maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. -numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). -readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. -maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. -minTransactionFailuresCountForBan; 8; ; -minTransactionFailuresPercentForBan; 10; ; - - -config-pt.properties -partialtransactions -cacheMaxResponseSize; 5MB -cacheMaxSize; 20MB - - -config-task.properties -logging task -startDelay; 1m -repeatDelay; 10m - -connect peers task for service Finalization -startDelay; 2s -repeatDelay; 1m - -finalization task -startDelay; 2m -repeatDelay; 15s - -pull finalization messages task -startDelay; 3s -repeatDelay; 1s - -pull finalization proof task -startDelay; 10s -repeatDelay; 50s - -harvesting task -startDelay; 30s -repeatDelay; 1s - -network chain height detection -startDelay; 1s -repeatDelay; 15s - -node discovery peers task -startDelay; 1m -minDelay; 1m -maxDelay; 10m -numPhaseOneRounds; 10 -numTransitionRounds; 20 - -node discovery ping task -startDelay; 2m -repeatDelay; 5m - -age peers task for service Readers -startDelay; 1m -repeatDelay; 1m - -batch partial transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Pt -startDelay; 3s -repeatDelay; 1m - -pull partial transactions task -startDelay; 10s -repeatDelay; 3s - -batch transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Sync -startDelay; 1s -repeatDelay; 1m - -pull unconfirmed transactions task -startDelay; 4s -repeatDelay; 3s - -synchronizer task -startDelay; 3s -repeatDelay; 3s - -time synchronization task -startDelay; 1m -minDelay; 3m -maxDelay; 180m -numPhaseOneRounds; 5 -numTransitionRounds; 10 - -static node refresh task -startDelay; 5ms -minDelay; 15s -maxDelay; 24h -numPhaseOneRounds; 20 -numTransitionRounds; 20 - - -config-timesync.properties -timesynchronization -maxNodes; 20 -minImportance; 3'750 - - -config-user.properties -account -enableDelegatedHarvestersAutoDetection; true - -storage -seedDirectory; ./seed -certificateDirectory; ./cert -dataDirectory; ./data -pluginsDirectory; /usr/catapult/lib -votingKeysDirectory; ./votingkeys diff --git a/test/reports/bootstrap-voting/peer-node-0-config.rst b/test/reports/bootstrap-voting/peer-node-0-config.rst deleted file mode 100644 index 36e153112..000000000 --- a/test/reports/bootstrap-voting/peer-node-0-config.rst +++ /dev/null @@ -1,467 +0,0 @@ -Symbol Bootstrap Version: CURRENT_VERSION - -config-database.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **database**; - databaseUri; mongodb://:27017 - databaseName; catapult - maxWriterThreads; 8 - maxDropBatchSize; 10 - writeTimeout; 10m - **plugins**; - catapult.mongo.plugins.accountlink; true - catapult.mongo.plugins.aggregate; true - catapult.mongo.plugins.lockhash; true - catapult.mongo.plugins.locksecret; true - catapult.mongo.plugins.metadata; true - catapult.mongo.plugins.mosaic; true - catapult.mongo.plugins.multisig; true - catapult.mongo.plugins.namespace; true - catapult.mongo.plugins.restrictionaccount; true - catapult.mongo.plugins.restrictionmosaic; true - catapult.mongo.plugins.transfer; true - -config-extensions-broker.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; true - extension.mongo; true - extension.zeromq; true - extension.hashcache; true - -config-extensions-recovery.properties -===================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.filespooling; true - extension.hashcache; true - -config-extensions-server.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.filespooling; false - extension.partialtransaction; false - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.harvesting; true - extension.syncsource; true - extension.diagnostics; true - extension.finalization; true - extension.hashcache; true - extension.networkheight; false - extension.nodediscovery; true - extension.packetserver; true - extension.pluginhandlers; true - extension.sync; true - extension.timesync; true - extension.transactionsink; true - extension.unbondedpruning; true - -config-finalization.properties -============================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **finalization**; - enableVoting; true - enableRevoteOnBoot; true - size; 10'000 - threshold; 7'000 - stepDuration; 4m - shortLivedCacheMessageDuration; 10m - messageSynchronizationMaxResponseSize; 20MB - maxHashesPerPoint; 256 - prevoteBlocksMultiple; 4 - unfinalizedBlocksDuration; 0m - -config-harvesting.properties -============================ -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **harvesting**; ; ; - harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. - harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. - enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. - maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. - delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. - beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. - -config-inflation.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **inflation**; - starting-at-height-1; 0 - starting-at-height-10000; 0 - -config-logging-broker.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_broker%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-recovery.properties -================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_recovery%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-server.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_server%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-messaging.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **messaging**; - subscriberPort; 7902 - listenInterface; 0.0.0.0 - -config-network.properties -========================= -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **network**; ; ; - identifier; public-test; NetworkIdentifier; Network identifier. - nemesisSignerPublicKey; DA007A7CCA877805DF0DD6250C9806E7B25DC3ED21E506569239D11A7175101A; Key; Nemesis public key. - nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. - generationHashSeed; 6AF8E35BBC7AC341E7931B39E2C9A591EDBE9F9111996053E6771D48E9C53B31; ; - epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. - **chain**; ; ; - enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. - enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. - currencyMosaicId; 0x3A39'4A5A'4739'A3D0; MosaicId; Mosaic id used as primary chain currency. - harvestingMosaicId; 0x5D21'03FE'AFEF'E767; MosaicId; Mosaic id used to provide harvesting ability. - blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. - blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. - importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. - importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. - maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. - maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. - defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. - maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. - maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. - initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. - maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. - totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. - minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. - votingSetGrouping; 180; ; - maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. - minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. - maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. - harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. - harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. - harvestNetworkFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the harvest network fee sink account. - maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - **plugin:catapult.plugins.accountlink**; - dummy; to trigger plugin load - **plugin:catapult.plugins.aggregate**; ; ; - maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. - maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. - enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. - enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. - maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - **plugin:catapult.plugins.lockhash**; ; ; - lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. - maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - **plugin:catapult.plugins.locksecret**; ; ; - maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. - minProofSize; 20; uint16_t; Minimum size of a proof in bytes. - maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - **plugin:catapult.plugins.metadata**; ; ; - maxValueSize; 1024; uint16_t; Maximum metadata value size. - **plugin:catapult.plugins.mosaic**; ; ; - maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. - maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. - maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. - mosaicRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the mosaic rental fee sink account. - mosaicRentalFee; 500; Amount; Mosaic rental fee. - **plugin:catapult.plugins.multisig**; ; ; - maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. - maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. - maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - **plugin:catapult.plugins.namespace**; ; ; - maxNameSize; 64; uint8_t; Maximum namespace name size. - maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. - maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. - minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. - maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. - namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. - reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. - namespaceRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the namespace rental fee sink account. - rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. - childNamespaceRentalFee; 100; Amount; Child namespace rental fee. - **plugin:catapult.plugins.restrictionaccount**; ; ; - maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. - **plugin:catapult.plugins.restrictionmosaic**; ; ; - maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - **plugin:catapult.plugins.transfer**; ; ; - maxMessageSize; 1024; uint16_t; Maximum transaction message size. - -config-node.properties -====================== -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **node**; ; ; - port; 7900; unsigned short; Server port. - maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. - enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. - enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. - enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. - enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. - fileDatabaseBatchSize; 1; ; - enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. - transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. - maxHashesPerSyncAttempt; 370; ; - maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. - maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. - shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. - shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. - shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. - shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. - minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. - maxTimeBehindPullTransactionsStart; 5m; ; - transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. - unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. - unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. - connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. - syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. - socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). - socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. - maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. - blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. - blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. - blockDisruptorMaxMemorySize; 300MB; ; - transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. - transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. - transactionDisruptorMaxMemorySize; 20MB; ; - enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. - enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. - maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. - minPartnerNodeVersion; 1.0.0.0; ; - maxPartnerNodeVersion; 1.0.255.255; ; - trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. - localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. - listenInterface; 0.0.0.0; ; - **cache_database**; - enableStatistics; false - maxOpenFiles; 0 - maxBackgroundThreads; 0 - maxSubcompactionThreads; 0 - blockCacheSize; 0MB - memtableMemoryBudget; 0MB - maxWriteBatchSize; 5MB - **localnode**; ; ; - host; peer-node-0; string; Node host (leave empty to auto-detect IP). - friendlyName; my-peer-node-0; string; Node friendly name (leave empty to use address). - version; 1.0.1.0; uint32_t; Node version. - roles; Peer,Voting; ionet::NodeRoles; Node roles. - **outgoing_connections**; ; ; - maxConnections; 10; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - **incoming_connections**; ; ; - maxConnections; 512; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - **banning**; ; ; - defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. - maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. - keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. - maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. - numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). - readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. - maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. - minTransactionFailuresCountForBan; 8; ; - minTransactionFailuresPercentForBan; 10; ; - -config-pt.properties -==================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **partialtransactions**; - cacheMaxResponseSize; 5MB - cacheMaxSize; 20MB - -config-task.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **logging task**; - startDelay; 1m - repeatDelay; 10m - **connect peers task for service Finalization**; - startDelay; 2s - repeatDelay; 1m - **finalization task**; - startDelay; 2m - repeatDelay; 15s - **pull finalization messages task**; - startDelay; 3s - repeatDelay; 1s - **pull finalization proof task**; - startDelay; 10s - repeatDelay; 50s - **harvesting task**; - startDelay; 30s - repeatDelay; 1s - **network chain height detection**; - startDelay; 1s - repeatDelay; 15s - **node discovery peers task**; - startDelay; 1m - minDelay; 1m - maxDelay; 10m - numPhaseOneRounds; 10 - numTransitionRounds; 20 - **node discovery ping task**; - startDelay; 2m - repeatDelay; 5m - **age peers task for service Readers**; - startDelay; 1m - repeatDelay; 1m - **batch partial transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Pt**; - startDelay; 3s - repeatDelay; 1m - **pull partial transactions task**; - startDelay; 10s - repeatDelay; 3s - **batch transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Sync**; - startDelay; 1s - repeatDelay; 1m - **pull unconfirmed transactions task**; - startDelay; 4s - repeatDelay; 3s - **synchronizer task**; - startDelay; 3s - repeatDelay; 3s - **time synchronization task**; - startDelay; 1m - minDelay; 3m - maxDelay; 180m - numPhaseOneRounds; 5 - numTransitionRounds; 10 - **static node refresh task**; - startDelay; 5ms - minDelay; 15s - maxDelay; 24h - numPhaseOneRounds; 20 - numTransitionRounds; 20 - -config-timesync.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **timesynchronization**; - maxNodes; 20 - minImportance; 3'750 - -config-user.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **account**; - enableDelegatedHarvestersAutoDetection; true - **storage**; - seedDirectory; ./seed - certificateDirectory; ./cert - dataDirectory; ./data - pluginsDirectory; /usr/catapult/lib - votingKeysDirectory; ./votingkeys diff --git a/test/reports/bootstrap-voting/peer-node-1-config.csv b/test/reports/bootstrap-voting/peer-node-1-config.csv deleted file mode 100644 index e3dd024dc..000000000 --- a/test/reports/bootstrap-voting/peer-node-1-config.csv +++ /dev/null @@ -1,444 +0,0 @@ -symbol-bootstrap-version; CURRENT_VERSION - -config-database.properties -database -databaseUri; mongodb://:27017 -databaseName; catapult -maxWriterThreads; 8 -maxDropBatchSize; 10 -writeTimeout; 10m - -plugins -catapult.mongo.plugins.accountlink; true -catapult.mongo.plugins.aggregate; true -catapult.mongo.plugins.lockhash; true -catapult.mongo.plugins.locksecret; true -catapult.mongo.plugins.metadata; true -catapult.mongo.plugins.mosaic; true -catapult.mongo.plugins.multisig; true -catapult.mongo.plugins.namespace; true -catapult.mongo.plugins.restrictionaccount; true -catapult.mongo.plugins.restrictionmosaic; true -catapult.mongo.plugins.transfer; true - - -config-extensions-broker.properties -extensions -extension.addressextraction; true -extension.mongo; true -extension.zeromq; true -extension.hashcache; true - - -config-extensions-recovery.properties -extensions -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.filespooling; true -extension.hashcache; true - - -config-extensions-server.properties -extensions -extension.filespooling; false -extension.partialtransaction; false -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.harvesting; true -extension.syncsource; true -extension.diagnostics; true -extension.finalization; true -extension.hashcache; true -extension.networkheight; false -extension.nodediscovery; true -extension.packetserver; true -extension.pluginhandlers; true -extension.sync; true -extension.timesync; true -extension.transactionsink; true -extension.unbondedpruning; true - - -config-finalization.properties -finalization -enableVoting; true -enableRevoteOnBoot; true -size; 10'000 -threshold; 7'000 -stepDuration; 4m -shortLivedCacheMessageDuration; 10m -messageSynchronizationMaxResponseSize; 20MB -maxHashesPerPoint; 256 -prevoteBlocksMultiple; 4 -unfinalizedBlocksDuration; 0m - - -config-harvesting.properties -harvesting -harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. -harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. -enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. -maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. -delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. -beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. - - -config-inflation.properties -inflation -starting-at-height-1; 0 -starting-at-height-10000; 0 - - -config-logging-broker.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_broker%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-recovery.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_recovery%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-server.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_server%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-messaging.properties -messaging -subscriberPort; 7902 -listenInterface; 0.0.0.0 - - -config-network.properties -network -identifier; public-test; NetworkIdentifier; Network identifier. -nemesisSignerPublicKey; DA007A7CCA877805DF0DD6250C9806E7B25DC3ED21E506569239D11A7175101A; Key; Nemesis public key. -nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. -generationHashSeed; 6AF8E35BBC7AC341E7931B39E2C9A591EDBE9F9111996053E6771D48E9C53B31; ; -epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. - -chain -enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. -enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. -currencyMosaicId; 0x3A39'4A5A'4739'A3D0; MosaicId; Mosaic id used as primary chain currency. -harvestingMosaicId; 0x5D21'03FE'AFEF'E767; MosaicId; Mosaic id used to provide harvesting ability. -blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. -blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. -importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. -importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. -maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. -maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. -defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. -maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. -maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. -initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. -maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. -totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. -minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. -votingSetGrouping; 180; ; -maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. -minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. -maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. -harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. -harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. -harvestNetworkFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the harvest network fee sink account. -maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - -plugin:catapult.plugins.accountlink -dummy; to trigger plugin load - -plugin:catapult.plugins.aggregate -maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. -maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. -enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. -enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. -maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - -plugin:catapult.plugins.lockhash -lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. -maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - -plugin:catapult.plugins.locksecret -maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. -minProofSize; 20; uint16_t; Minimum size of a proof in bytes. -maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - -plugin:catapult.plugins.metadata -maxValueSize; 1024; uint16_t; Maximum metadata value size. - -plugin:catapult.plugins.mosaic -maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. -maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. -maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. -mosaicRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the mosaic rental fee sink account. -mosaicRentalFee; 500; Amount; Mosaic rental fee. - -plugin:catapult.plugins.multisig -maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. -maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. -maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - -plugin:catapult.plugins.namespace -maxNameSize; 64; uint8_t; Maximum namespace name size. -maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. -maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. -minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. -maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. -namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. -reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. -namespaceRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the namespace rental fee sink account. -rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. -childNamespaceRentalFee; 100; Amount; Child namespace rental fee. - -plugin:catapult.plugins.restrictionaccount -maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. - -plugin:catapult.plugins.restrictionmosaic -maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - -plugin:catapult.plugins.transfer -maxMessageSize; 1024; uint16_t; Maximum transaction message size. - - -config-node.properties -node -port; 7900; unsigned short; Server port. -maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. -enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. -enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. -enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. -enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. -fileDatabaseBatchSize; 1; ; -enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. -transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. -maxHashesPerSyncAttempt; 370; ; -maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. -maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. -shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. -shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. -shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. -shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. -minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. -maxTimeBehindPullTransactionsStart; 5m; ; -transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. -unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. -unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. -connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. -syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. -socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). -socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. -maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. -blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. -blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. -blockDisruptorMaxMemorySize; 300MB; ; -transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. -transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. -transactionDisruptorMaxMemorySize; 20MB; ; -enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. -enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. -maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. -minPartnerNodeVersion; 1.0.0.0; ; -maxPartnerNodeVersion; 1.0.255.255; ; -trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. -localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. -listenInterface; 0.0.0.0; ; - -cache_database -enableStatistics; false -maxOpenFiles; 0 -maxBackgroundThreads; 0 -maxSubcompactionThreads; 0 -blockCacheSize; 0MB -memtableMemoryBudget; 0MB -maxWriteBatchSize; 5MB - -localnode -host; peer-node-1; string; Node host (leave empty to auto-detect IP). -friendlyName; my-peer-node-1; string; Node friendly name (leave empty to use address). -version; 1.0.1.0; uint32_t; Node version. -roles; Peer,Voting; ionet::NodeRoles; Node roles. - -outgoing_connections -maxConnections; 10; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - -incoming_connections -maxConnections; 512; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. -backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - -banning -defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. -maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. -keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. -maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. -numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). -readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. -maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. -minTransactionFailuresCountForBan; 8; ; -minTransactionFailuresPercentForBan; 10; ; - - -config-pt.properties -partialtransactions -cacheMaxResponseSize; 5MB -cacheMaxSize; 20MB - - -config-task.properties -logging task -startDelay; 1m -repeatDelay; 10m - -connect peers task for service Finalization -startDelay; 2s -repeatDelay; 1m - -finalization task -startDelay; 2m -repeatDelay; 15s - -pull finalization messages task -startDelay; 3s -repeatDelay; 1s - -pull finalization proof task -startDelay; 10s -repeatDelay; 50s - -harvesting task -startDelay; 30s -repeatDelay; 1s - -network chain height detection -startDelay; 1s -repeatDelay; 15s - -node discovery peers task -startDelay; 1m -minDelay; 1m -maxDelay; 10m -numPhaseOneRounds; 10 -numTransitionRounds; 20 - -node discovery ping task -startDelay; 2m -repeatDelay; 5m - -age peers task for service Readers -startDelay; 1m -repeatDelay; 1m - -batch partial transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Pt -startDelay; 3s -repeatDelay; 1m - -pull partial transactions task -startDelay; 10s -repeatDelay; 3s - -batch transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Sync -startDelay; 1s -repeatDelay; 1m - -pull unconfirmed transactions task -startDelay; 4s -repeatDelay; 3s - -synchronizer task -startDelay; 3s -repeatDelay; 3s - -time synchronization task -startDelay; 1m -minDelay; 3m -maxDelay; 180m -numPhaseOneRounds; 5 -numTransitionRounds; 10 - -static node refresh task -startDelay; 5ms -minDelay; 15s -maxDelay; 24h -numPhaseOneRounds; 20 -numTransitionRounds; 20 - - -config-timesync.properties -timesynchronization -maxNodes; 20 -minImportance; 3'750 - - -config-user.properties -account -enableDelegatedHarvestersAutoDetection; true - -storage -seedDirectory; ./seed -certificateDirectory; ./cert -dataDirectory; ./data -pluginsDirectory; /usr/catapult/lib -votingKeysDirectory; ./votingkeys diff --git a/test/reports/bootstrap-voting/peer-node-1-config.rst b/test/reports/bootstrap-voting/peer-node-1-config.rst deleted file mode 100644 index 711d324eb..000000000 --- a/test/reports/bootstrap-voting/peer-node-1-config.rst +++ /dev/null @@ -1,467 +0,0 @@ -Symbol Bootstrap Version: CURRENT_VERSION - -config-database.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **database**; - databaseUri; mongodb://:27017 - databaseName; catapult - maxWriterThreads; 8 - maxDropBatchSize; 10 - writeTimeout; 10m - **plugins**; - catapult.mongo.plugins.accountlink; true - catapult.mongo.plugins.aggregate; true - catapult.mongo.plugins.lockhash; true - catapult.mongo.plugins.locksecret; true - catapult.mongo.plugins.metadata; true - catapult.mongo.plugins.mosaic; true - catapult.mongo.plugins.multisig; true - catapult.mongo.plugins.namespace; true - catapult.mongo.plugins.restrictionaccount; true - catapult.mongo.plugins.restrictionmosaic; true - catapult.mongo.plugins.transfer; true - -config-extensions-broker.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; true - extension.mongo; true - extension.zeromq; true - extension.hashcache; true - -config-extensions-recovery.properties -===================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.filespooling; true - extension.hashcache; true - -config-extensions-server.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.filespooling; false - extension.partialtransaction; false - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.harvesting; true - extension.syncsource; true - extension.diagnostics; true - extension.finalization; true - extension.hashcache; true - extension.networkheight; false - extension.nodediscovery; true - extension.packetserver; true - extension.pluginhandlers; true - extension.sync; true - extension.timesync; true - extension.transactionsink; true - extension.unbondedpruning; true - -config-finalization.properties -============================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **finalization**; - enableVoting; true - enableRevoteOnBoot; true - size; 10'000 - threshold; 7'000 - stepDuration; 4m - shortLivedCacheMessageDuration; 10m - messageSynchronizationMaxResponseSize; 20MB - maxHashesPerPoint; 256 - prevoteBlocksMultiple; 4 - unfinalizedBlocksDuration; 0m - -config-harvesting.properties -============================ -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **harvesting**; ; ; - harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. - harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. - enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. - maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. - delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. - beneficiaryAddress; ; Address; Address of the account receiving part of the harvested fee. - -config-inflation.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **inflation**; - starting-at-height-1; 0 - starting-at-height-10000; 0 - -config-logging-broker.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_broker%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-recovery.properties -================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_recovery%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-server.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_server%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-messaging.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **messaging**; - subscriberPort; 7902 - listenInterface; 0.0.0.0 - -config-network.properties -========================= -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **network**; ; ; - identifier; public-test; NetworkIdentifier; Network identifier. - nemesisSignerPublicKey; DA007A7CCA877805DF0DD6250C9806E7B25DC3ED21E506569239D11A7175101A; Key; Nemesis public key. - nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. - generationHashSeed; 6AF8E35BBC7AC341E7931B39E2C9A591EDBE9F9111996053E6771D48E9C53B31; ; - epochAdjustment; 1573430400s; utils::TimeSpan; Nemesis epoch time adjustment. - **chain**; ; ; - enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. - enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. - currencyMosaicId; 0x3A39'4A5A'4739'A3D0; MosaicId; Mosaic id used as primary chain currency. - harvestingMosaicId; 0x5D21'03FE'AFEF'E767; MosaicId; Mosaic id used to provide harvesting ability. - blockGenerationTargetTime; 15s; utils::TimeSpan; Targeted time between blocks. - blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. - importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. - importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. - maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. - maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. - defaultDynamicFeeMultiplier; 1'000; BlockFeeMultiplier; Default multiplier to use for dynamic fees. - maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. - maxBlockFutureTime; 500ms; utils::TimeSpan; Maximum future time of a block that can be accepted. - initialCurrencyAtomicUnits; 8'998'999'998'000'000; Amount; Initial currency atomic units available in the network. - maxMosaicAtomicUnits; 9'000'000'000'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. - totalChainImportance; 15'000'000; Importance; Total whole importance units available in the network. - minHarvesterBalance; 500; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - minVoterBalance; 50'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. - votingSetGrouping; 180; ; - maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. - minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. - maxVotingKeyLifetime; 26280; uint32_t; Maximum number of finalization rounds for which voting key can be registered. - harvestBeneficiaryPercentage; 10; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. - harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. - harvestNetworkFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the harvest network fee sink account. - maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - **plugin:catapult.plugins.accountlink**; - dummy; to trigger plugin load - **plugin:catapult.plugins.aggregate**; ; ; - maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. - maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. - enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. - enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. - maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - **plugin:catapult.plugins.lockhash**; ; ; - lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. - maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - **plugin:catapult.plugins.locksecret**; ; ; - maxSecretLockDuration; 30d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. - minProofSize; 20; uint16_t; Minimum size of a proof in bytes. - maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - **plugin:catapult.plugins.metadata**; ; ; - maxValueSize; 1024; uint16_t; Maximum metadata value size. - **plugin:catapult.plugins.mosaic**; ; ; - maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. - maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. - maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. - mosaicRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the mosaic rental fee sink account. - mosaicRentalFee; 500; Amount; Mosaic rental fee. - **plugin:catapult.plugins.multisig**; ; ; - maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. - maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. - maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - **plugin:catapult.plugins.namespace**; ; ; - maxNameSize; 64; uint8_t; Maximum namespace name size. - maxChildNamespaces; 256; uint16_t; Maximum number of children for a root namespace. - maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. - minNamespaceDuration; 1m; utils::BlockSpan; Minimum namespace duration. - maxNamespaceDuration; 365d; utils::BlockSpan; Maximum namespace duration. - namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. - reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. - namespaceRentalFeeSinkAddress; TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q; Address; Address of the namespace rental fee sink account. - rootNamespaceRentalFeePerBlock; 1; Amount; Root namespace rental fee per block. - childNamespaceRentalFee; 100; Amount; Child namespace rental fee. - **plugin:catapult.plugins.restrictionaccount**; ; ; - maxAccountRestrictionValues; 512; uint16_t; Maximum number of account restriction values. - **plugin:catapult.plugins.restrictionmosaic**; ; ; - maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - **plugin:catapult.plugins.transfer**; ; ; - maxMessageSize; 1024; uint16_t; Maximum transaction message size. - -config-node.properties -====================== -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **node**; ; ; - port; 7900; unsigned short; Server port. - maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. - enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. - enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. - enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. - enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. - fileDatabaseBatchSize; 1; ; - enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. - transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. - maxHashesPerSyncAttempt; 370; ; - maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. - maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. - shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. - shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. - shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. - shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. - minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. - maxTimeBehindPullTransactionsStart; 5m; ; - transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. - unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. - unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. - connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. - syncTimeout; 20m; utils::TimeSpan; Timeout for syncing with a peer. - socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). - socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. - maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. - blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. - blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. - blockDisruptorMaxMemorySize; 300MB; ; - transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. - transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. - transactionDisruptorMaxMemorySize; 20MB; ; - enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. - enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. - maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. - minPartnerNodeVersion; 1.0.0.0; ; - maxPartnerNodeVersion; 1.0.255.255; ; - trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. - localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. - listenInterface; 0.0.0.0; ; - **cache_database**; - enableStatistics; false - maxOpenFiles; 0 - maxBackgroundThreads; 0 - maxSubcompactionThreads; 0 - blockCacheSize; 0MB - memtableMemoryBudget; 0MB - maxWriteBatchSize; 5MB - **localnode**; ; ; - host; peer-node-1; string; Node host (leave empty to auto-detect IP). - friendlyName; my-peer-node-1; string; Node friendly name (leave empty to use address). - version; 1.0.1.0; uint32_t; Node version. - roles; Peer,Voting; ionet::NodeRoles; Node roles. - **outgoing_connections**; ; ; - maxConnections; 10; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - **incoming_connections**; ; ; - maxConnections; 512; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - **banning**; ; ; - defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. - maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. - keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. - maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. - numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). - readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. - maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. - minTransactionFailuresCountForBan; 8; ; - minTransactionFailuresPercentForBan; 10; ; - -config-pt.properties -==================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **partialtransactions**; - cacheMaxResponseSize; 5MB - cacheMaxSize; 20MB - -config-task.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **logging task**; - startDelay; 1m - repeatDelay; 10m - **connect peers task for service Finalization**; - startDelay; 2s - repeatDelay; 1m - **finalization task**; - startDelay; 2m - repeatDelay; 15s - **pull finalization messages task**; - startDelay; 3s - repeatDelay; 1s - **pull finalization proof task**; - startDelay; 10s - repeatDelay; 50s - **harvesting task**; - startDelay; 30s - repeatDelay; 1s - **network chain height detection**; - startDelay; 1s - repeatDelay; 15s - **node discovery peers task**; - startDelay; 1m - minDelay; 1m - maxDelay; 10m - numPhaseOneRounds; 10 - numTransitionRounds; 20 - **node discovery ping task**; - startDelay; 2m - repeatDelay; 5m - **age peers task for service Readers**; - startDelay; 1m - repeatDelay; 1m - **batch partial transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Pt**; - startDelay; 3s - repeatDelay; 1m - **pull partial transactions task**; - startDelay; 10s - repeatDelay; 3s - **batch transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Sync**; - startDelay; 1s - repeatDelay; 1m - **pull unconfirmed transactions task**; - startDelay; 4s - repeatDelay; 3s - **synchronizer task**; - startDelay; 3s - repeatDelay; 3s - **time synchronization task**; - startDelay; 1m - minDelay; 3m - maxDelay; 180m - numPhaseOneRounds; 5 - numTransitionRounds; 10 - **static node refresh task**; - startDelay; 5ms - minDelay; 15s - maxDelay; 24h - numPhaseOneRounds; 20 - numTransitionRounds; 20 - -config-timesync.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **timesynchronization**; - maxNodes; 20 - minImportance; 3'750 - -config-user.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **account**; - enableDelegatedHarvestersAutoDetection; true - **storage**; - seedDirectory; ./seed - certificateDirectory; ./cert - dataDirectory; ./data - pluginsDirectory; /usr/catapult/lib - votingKeysDirectory; ./votingkeys diff --git a/test/reports/bootstrap-voting/rest-gateway-0-rest.json b/test/reports/bootstrap-voting/rest-gateway-0-rest.json deleted file mode 100644 index 7ece67cf8..000000000 --- a/test/reports/bootstrap-voting/rest-gateway-0-rest.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "network": { - "name": "publicTest", - "description": "catapult development network" - }, - "port": 3000, - "crossDomain": { - "allowedHosts": [ - "*" - ], - "allowedMethods": [ - "GET", - "POST", - "PUT", - "OPTIONS" - ] - }, - "extensions": [ - "accountLink", - "aggregate", - "lockHash", - "lockSecret", - "mosaic", - "metadata", - "multisig", - "namespace", - "receipts", - "restrictions", - "transfer" - ], - "db": { - "url": "mongodb://db-0:27017/", - "name": "catapult", - "pageSizeMin": 10, - "pageSizeMax": 100, - "maxConnectionAttempts": 15, - "baseRetryDelay": 750, - "connectionPoolSize": 10 - }, - "apiNode": { - "host": "api-node-0", - "port": 7900, - "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", - "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", - "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", - "timeout": 1000, - "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", - "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" - }, - "websocket": { - "mq": { - "host": "api-node-broker-0", - "port": 7902, - "monitorInterval": 500, - "connectTimeout": 10000, - "monitorLoggingThrottle": 60000, - "maxSubscriptions": 300 - }, - "allowOptionalAddress": true - }, - "throttling": { - "burst": 80, - "rate": 60 - }, - "logging": { - "console": { - "formats": [ - "colorize", - "simple" - ], - "level": "verbose", - "handleExceptions": true - }, - "file": { - "formats": [ - "prettyPrint" - ], - "level": "verbose", - "handleExceptions": true, - "filename": "/symbol-workdir/logs/catapult-rest.log", - "maxsize": 20971520, - "maxFiles": 100 - } - }, - "numBlocksTransactionFeeStats": 300, - "deployment": { - "deploymentTool": "symbol-bootstrap", - "deploymentToolVersion": "abc", - "lastUpdatedDate": "2021-05-23" - } -} diff --git a/test/reports/mainnet-dual-voting/node-config.csv b/test/reports/mainnet-dual-voting/node-config.csv deleted file mode 100644 index c2ad90654..000000000 --- a/test/reports/mainnet-dual-voting/node-config.csv +++ /dev/null @@ -1,865 +0,0 @@ -symbol-bootstrap-version; CURRENT_VERSION - -config-database.properties -database -databaseUri; mongodb://db:27017 -databaseName; catapult -maxWriterThreads; 8 -maxDropBatchSize; 10 -writeTimeout; 10m - -plugins -catapult.mongo.plugins.accountlink; true -catapult.mongo.plugins.aggregate; true -catapult.mongo.plugins.lockhash; true -catapult.mongo.plugins.locksecret; true -catapult.mongo.plugins.metadata; true -catapult.mongo.plugins.mosaic; true -catapult.mongo.plugins.multisig; true -catapult.mongo.plugins.namespace; true -catapult.mongo.plugins.restrictionaccount; true -catapult.mongo.plugins.restrictionmosaic; true -catapult.mongo.plugins.transfer; true - - -config-extensions-broker.properties -extensions -extension.addressextraction; true -extension.mongo; true -extension.zeromq; true -extension.hashcache; true - - -config-extensions-recovery.properties -extensions -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.filespooling; true -extension.hashcache; true - - -config-extensions-server.properties -extensions -extension.filespooling; true -extension.partialtransaction; true -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.harvesting; true -extension.syncsource; true -extension.diagnostics; true -extension.finalization; true -extension.hashcache; true -extension.networkheight; false -extension.nodediscovery; true -extension.packetserver; true -extension.pluginhandlers; true -extension.sync; true -extension.timesync; true -extension.transactionsink; true -extension.unbondedpruning; true - - -config-finalization.properties -finalization -enableVoting; true -enableRevoteOnBoot; false -size; 10'000 -threshold; 7'000 -stepDuration; 5m -shortLivedCacheMessageDuration; 10m -messageSynchronizationMaxResponseSize; 20MB -maxHashesPerPoint; 256 -prevoteBlocksMultiple; 4 -unfinalizedBlocksDuration; 0m - - -config-harvesting.properties -harvesting -harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. -harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. -enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. -maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. -delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. -beneficiaryAddress; NDQ32MTJICEPJDU45KVN7BAM4A4GI7OARNBUUFY; Address; Address of the account receiving part of the harvested fee. - - -config-inflation.properties -inflation -starting-at-height-2; 0 -starting-at-height-5760; 191997042 -starting-at-height-172799; 183764522 -starting-at-height-435299; 175884998 -starting-at-height-697799; 168343336 -starting-at-height-960299; 161125048 -starting-at-height-1222799; 154216270 -starting-at-height-1485299; 147603728 -starting-at-height-1747799; 141274720 -starting-at-height-2010299; 135217090 -starting-at-height-2272799; 129419202 -starting-at-height-2535299; 123869918 -starting-at-height-2797799; 118558578 -starting-at-height-3060299; 113474978 -starting-at-height-3322799; 108609356 -starting-at-height-3585299; 103952364 -starting-at-height-3847799; 99495056 -starting-at-height-4110299; 95228870 -starting-at-height-4372799; 91145612 -starting-at-height-4635299; 87237436 -starting-at-height-4897799; 83496838 -starting-at-height-5160299; 79916630 -starting-at-height-5422799; 76489934 -starting-at-height-5685299; 73210170 -starting-at-height-5947799; 70071038 -starting-at-height-6210299; 67066506 -starting-at-height-6472799; 64190804 -starting-at-height-6735299; 61438406 -starting-at-height-6997799; 58804028 -starting-at-height-7260299; 56282608 -starting-at-height-7522799; 53869300 -starting-at-height-7785299; 51559472 -starting-at-height-8047799; 49348686 -starting-at-height-8310299; 47232696 -starting-at-height-8572799; 45207434 -starting-at-height-8835299; 43269014 -starting-at-height-9097799; 41413708 -starting-at-height-9360299; 39637956 -starting-at-height-9622799; 37938346 -starting-at-height-9885299; 36311610 -starting-at-height-10147799; 34754628 -starting-at-height-10410299; 33264406 -starting-at-height-10672799; 31838082 -starting-at-height-10935299; 30472918 -starting-at-height-11197799; 29166288 -starting-at-height-11460299; 27915686 -starting-at-height-11722799; 26718706 -starting-at-height-11985299; 25573052 -starting-at-height-12247799; 24476520 -starting-at-height-12510299; 23427008 -starting-at-height-12772799; 22422496 -starting-at-height-13035299; 21461056 -starting-at-height-13297799; 20540840 -starting-at-height-13560299; 19660082 -starting-at-height-13822799; 18817090 -starting-at-height-14085299; 18010244 -starting-at-height-14347799; 17237994 -starting-at-height-14610299; 16498858 -starting-at-height-14872799; 15791412 -starting-at-height-15135299; 15114302 -starting-at-height-15397799; 14466226 -starting-at-height-15660299; 13845938 -starting-at-height-15922799; 13252246 -starting-at-height-16185299; 12684012 -starting-at-height-16447799; 12140142 -starting-at-height-16710299; 11619592 -starting-at-height-16972799; 11121364 -starting-at-height-17235299; 10644498 -starting-at-height-17497799; 10188078 -starting-at-height-17760299; 9751230 -starting-at-height-18022799; 9333114 -starting-at-height-18285299; 8932924 -starting-at-height-18547799; 8549896 -starting-at-height-18810299; 8183290 -starting-at-height-19072799; 7832404 -starting-at-height-19335299; 7496562 -starting-at-height-19597799; 7175122 -starting-at-height-19860299; 6867464 -starting-at-height-20122799; 6573000 -starting-at-height-20385299; 6291160 -starting-at-height-20647799; 6021404 -starting-at-height-20910299; 5763216 -starting-at-height-21172799; 5516100 -starting-at-height-21435299; 5279578 -starting-at-height-21697799; 5053198 -starting-at-height-21960299; 4836526 -starting-at-height-22222799; 4629144 -starting-at-height-22485299; 4430652 -starting-at-height-22747799; 4240674 -starting-at-height-23010299; 4058840 -starting-at-height-23272799; 3884804 -starting-at-height-23535299; 3718230 -starting-at-height-23797799; 3558798 -starting-at-height-24060299; 3406202 -starting-at-height-24322799; 3260150 -starting-at-height-24585299; 3120360 -starting-at-height-24847799; 2986564 -starting-at-height-25110299; 2858506 -starting-at-height-25372799; 2735938 -starting-at-height-25635299; 2618624 -starting-at-height-25897799; 2506342 -starting-at-height-26160299; 2398874 -starting-at-height-26422799; 2296014 -starting-at-height-26685299; 2197564 -starting-at-height-26947799; 2103336 -starting-at-height-27210299; 2013150 -starting-at-height-27472799; 1926828 -starting-at-height-27735299; 1844210 -starting-at-height-27997799; 1765132 -starting-at-height-28260299; 1689446 -starting-at-height-28522799; 1617006 -starting-at-height-28785299; 1547672 -starting-at-height-29047799; 1481310 -starting-at-height-29310299; 1417794 -starting-at-height-29572799; 1357000 -starting-at-height-29835299; 1298814 -starting-at-height-30097799; 1243124 -starting-at-height-30360299; 1189820 -starting-at-height-30622799; 1138802 -starting-at-height-30885299; 1089972 -starting-at-height-31147799; 1043236 -starting-at-height-31410299; 998504 -starting-at-height-31672799; 955690 -starting-at-height-31935299; 914712 -starting-at-height-32197799; 875490 -starting-at-height-32460299; 837950 -starting-at-height-32722799; 802020 -starting-at-height-32985299; 767630 -starting-at-height-33247799; 734716 -starting-at-height-33510299; 703212 -starting-at-height-33772799; 673060 -starting-at-height-34035299; 644200 -starting-at-height-34297799; 616578 -starting-at-height-34560299; 590140 -starting-at-height-34822799; 564836 -starting-at-height-35085299; 540616 -starting-at-height-35347799; 517436 -starting-at-height-35610299; 495248 -starting-at-height-35872799; 474014 -starting-at-height-36135299; 453688 -starting-at-height-36397799; 434234 -starting-at-height-36660299; 415616 -starting-at-height-36922799; 397794 -starting-at-height-37185299; 380738 -starting-at-height-37447799; 364412 -starting-at-height-37710299; 348786 -starting-at-height-37972799; 333832 -starting-at-height-38235299; 319518 -starting-at-height-38497799; 305816 -starting-at-height-38760299; 292704 -starting-at-height-39022799; 280154 -starting-at-height-39285299; 268140 -starting-at-height-39547799; 256644 -starting-at-height-39810299; 245638 -starting-at-height-40072799; 235106 -starting-at-height-40335299; 225026 -starting-at-height-40597799; 215376 -starting-at-height-40860299; 206142 -starting-at-height-41122799; 197302 -starting-at-height-41385299; 188842 -starting-at-height-41647799; 180744 -starting-at-height-41910299; 172994 -starting-at-height-42172799; 165578 -starting-at-height-42435299; 158478 -starting-at-height-42697799; 151682 -starting-at-height-42960299; 145178 -starting-at-height-43222799; 138954 -starting-at-height-43485299; 132994 -starting-at-height-43747799; 127292 -starting-at-height-44010299; 121834 -starting-at-height-44272799; 116610 -starting-at-height-44535299; 111610 -starting-at-height-44797799; 106824 -starting-at-height-45060299; 102244 -starting-at-height-45322799; 97860 -starting-at-height-45585299; 93664 -starting-at-height-45847799; 89648 -starting-at-height-46110299; 85804 -starting-at-height-46372799; 82124 -starting-at-height-46635299; 78602 -starting-at-height-46897799; 75232 -starting-at-height-47160299; 72006 -starting-at-height-47422799; 68920 -starting-at-height-47685299; 65964 -starting-at-height-47947799; 63136 -starting-at-height-48210299; 60428 -starting-at-height-48472799; 57838 -starting-at-height-48735299; 55358 -starting-at-height-48997799; 52984 -starting-at-height-49260299; 50712 -starting-at-height-49522799; 48538 -starting-at-height-49785299; 46456 -starting-at-height-50047799; 44464 -starting-at-height-50310299; 42558 -starting-at-height-50572799; 40732 -starting-at-height-50835299; 38986 -starting-at-height-51097799; 37314 -starting-at-height-51360299; 35714 -starting-at-height-51622799; 34182 -starting-at-height-51885299; 32716 -starting-at-height-52147799; 31314 -starting-at-height-52410299; 29972 -starting-at-height-52672799; 28686 -starting-at-height-52935299; 27456 -starting-at-height-53197799; 26278 -starting-at-height-53460299; 25152 -starting-at-height-53722799; 24074 -starting-at-height-53985299; 23042 -starting-at-height-54247799; 22054 -starting-at-height-54510299; 21108 -starting-at-height-54772799; 20202 -starting-at-height-55035299; 19336 -starting-at-height-55297799; 18506 -starting-at-height-55560299; 17714 -starting-at-height-55822799; 16954 -starting-at-height-56085299; 16226 -starting-at-height-56347799; 15532 -starting-at-height-56610299; 14866 -starting-at-height-56872799; 14228 -starting-at-height-57135299; 13618 -starting-at-height-57397799; 13034 -starting-at-height-57660299; 12474 -starting-at-height-57922799; 11940 -starting-at-height-58185299; 11428 -starting-at-height-58447799; 10938 -starting-at-height-58710299; 10468 -starting-at-height-58972799; 10020 -starting-at-height-59235299; 9590 -starting-at-height-59497799; 9178 -starting-at-height-59760299; 8786 -starting-at-height-60022799; 8408 -starting-at-height-60285299; 8048 -starting-at-height-60547799; 7702 -starting-at-height-60810299; 7372 -starting-at-height-61072799; 7056 -starting-at-height-61335299; 6754 -starting-at-height-61597799; 6464 -starting-at-height-61860299; 6186 -starting-at-height-62122799; 5922 -starting-at-height-62385299; 5668 -starting-at-height-62647799; 5424 -starting-at-height-62910299; 5192 -starting-at-height-63172799; 4970 -starting-at-height-63435299; 4756 -starting-at-height-63697799; 4552 -starting-at-height-63960299; 4356 -starting-at-height-64222799; 4170 -starting-at-height-64485299; 3992 -starting-at-height-64747799; 3820 -starting-at-height-65010299; 3656 -starting-at-height-65272799; 3500 -starting-at-height-65535299; 3350 -starting-at-height-65797799; 3206 -starting-at-height-66060299; 3068 -starting-at-height-66322799; 2936 -starting-at-height-66585299; 2810 -starting-at-height-66847799; 2690 -starting-at-height-67110299; 2574 -starting-at-height-67372799; 2464 -starting-at-height-67635299; 2358 -starting-at-height-67897799; 2258 -starting-at-height-68160299; 2160 -starting-at-height-68422799; 2068 -starting-at-height-68685299; 1980 -starting-at-height-68947799; 1894 -starting-at-height-69210299; 1812 -starting-at-height-69472799; 1736 -starting-at-height-69735299; 1660 -starting-at-height-69997799; 1590 -starting-at-height-70260299; 1522 -starting-at-height-70522799; 1456 -starting-at-height-70785299; 1394 -starting-at-height-71047799; 1334 -starting-at-height-71310299; 1276 -starting-at-height-71572799; 1222 -starting-at-height-71835299; 1170 -starting-at-height-72097799; 1120 -starting-at-height-72360299; 1072 -starting-at-height-72622799; 1026 -starting-at-height-72885299; 982 -starting-at-height-73147799; 938 -starting-at-height-73410299; 898 -starting-at-height-73672799; 860 -starting-at-height-73935299; 824 -starting-at-height-74197799; 788 -starting-at-height-74460299; 754 -starting-at-height-74722799; 722 -starting-at-height-74985299; 690 -starting-at-height-75247799; 662 -starting-at-height-75510299; 632 -starting-at-height-75772799; 606 -starting-at-height-76035299; 580 -starting-at-height-76297799; 554 -starting-at-height-76560299; 530 -starting-at-height-76822799; 508 -starting-at-height-77085299; 486 -starting-at-height-77347799; 466 -starting-at-height-77610299; 446 -starting-at-height-77872799; 426 -starting-at-height-78135299; 408 -starting-at-height-78397799; 390 -starting-at-height-78660299; 374 -starting-at-height-78922799; 358 -starting-at-height-79185299; 342 -starting-at-height-79447799; 328 -starting-at-height-79710299; 314 -starting-at-height-79972799; 300 -starting-at-height-80235299; 286 -starting-at-height-80497799; 274 -starting-at-height-80760299; 262 -starting-at-height-81022799; 252 -starting-at-height-81285299; 240 -starting-at-height-81547799; 230 -starting-at-height-81810299; 220 -starting-at-height-82072799; 210 -starting-at-height-82335299; 202 -starting-at-height-82597799; 194 -starting-at-height-82860299; 184 -starting-at-height-83122799; 176 -starting-at-height-83385299; 170 -starting-at-height-83647799; 162 -starting-at-height-83910299; 154 -starting-at-height-84172799; 148 -starting-at-height-84435299; 142 -starting-at-height-84697799; 136 -starting-at-height-84960299; 130 -starting-at-height-85222799; 124 -starting-at-height-85485299; 118 -starting-at-height-85747799; 114 -starting-at-height-86010299; 108 -starting-at-height-86272799; 104 -starting-at-height-86535299; 100 -starting-at-height-86797799; 96 -starting-at-height-87060299; 92 -starting-at-height-87322799; 88 -starting-at-height-87585299; 84 -starting-at-height-87847799; 80 -starting-at-height-88110299; 76 -starting-at-height-88372799; 72 -starting-at-height-88635299; 70 -starting-at-height-88897799; 66 -starting-at-height-89160299; 64 -starting-at-height-89422799; 62 -starting-at-height-89685299; 58 -starting-at-height-89947799; 56 -starting-at-height-90210299; 54 -starting-at-height-90472799; 52 -starting-at-height-90735299; 48 -starting-at-height-90997799; 46 -starting-at-height-91260299; 44 -starting-at-height-91522799; 42 -starting-at-height-91785299; 40 -starting-at-height-92047799; 40 -starting-at-height-92310299; 38 -starting-at-height-92572799; 36 -starting-at-height-92835299; 34 -starting-at-height-93097799; 32 -starting-at-height-93360299; 32 -starting-at-height-93622799; 30 -starting-at-height-93885299; 28 -starting-at-height-94147799; 28 -starting-at-height-94410299; 26 -starting-at-height-94672799; 24 -starting-at-height-94935299; 24 -starting-at-height-95197799; 22 -starting-at-height-95460299; 22 -starting-at-height-95722799; 20 -starting-at-height-95985299; 20 -starting-at-height-96247799; 18 -starting-at-height-96510299; 18 -starting-at-height-96772799; 18 -starting-at-height-97035299; 16 -starting-at-height-97297799; 16 -starting-at-height-97560299; 14 -starting-at-height-97822799; 14 -starting-at-height-98085299; 14 -starting-at-height-98347799; 12 -starting-at-height-98610299; 12 -starting-at-height-98872799; 12 -starting-at-height-99135299; 12 -starting-at-height-99397799; 10 -starting-at-height-99660299; 10 -starting-at-height-99922799; 10 -starting-at-height-100185299; 10 -starting-at-height-100447799; 8 -starting-at-height-100710299; 8 -starting-at-height-100972799; 8 -starting-at-height-101235299; 8 -starting-at-height-101497799; 8 -starting-at-height-101760299; 6 -starting-at-height-102022799; 6 -starting-at-height-102285299; 6 -starting-at-height-102547799; 6 -starting-at-height-102810299; 6 -starting-at-height-103072799; 6 -starting-at-height-103335299; 6 -starting-at-height-103597799; 4 -starting-at-height-103860299; 4 -starting-at-height-104122799; 4 -starting-at-height-104385299; 4 -starting-at-height-104647799; 4 -starting-at-height-104910299; 4 -starting-at-height-105172799; 4 -starting-at-height-105435299; 4 -starting-at-height-105697799; 4 -starting-at-height-105960299; 2 -starting-at-height-106222799; 2 -starting-at-height-106485299; 2 -starting-at-height-106747799; 2 -starting-at-height-107010299; 2 -starting-at-height-107272799; 2 -starting-at-height-107535299; 2 -starting-at-height-107797799; 2 -starting-at-height-108060299; 2 -starting-at-height-108322799; 2 -starting-at-height-108585299; 2 -starting-at-height-108847799; 2 -starting-at-height-109110299; 2 -starting-at-height-109372799; 2 -starting-at-height-109635299; 2 -starting-at-height-109897799; 2 -starting-at-height-110160299; 1 -starting-at-height-110422799; 0 - - -config-logging-broker.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_broker%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-recovery.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_recovery%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-server.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_server%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-messaging.properties -messaging -subscriberPort; 7902 -listenInterface; 0.0.0.0 - - -config-network.properties -network -identifier; public; NetworkIdentifier; Network identifier. -nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. -nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. -generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; -epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. - -chain -enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. -enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. -currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. -harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. -blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. -blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. -importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. -importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. -maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. -maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. -defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. -maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. -maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. -initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. -maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. -totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. -minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. -votingSetGrouping; 1440; ; -maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. -minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. -maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. -harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. -harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. -harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. -maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - -plugin:catapult.plugins.accountlink -dummy; to trigger plugin load - -plugin:catapult.plugins.aggregate -maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. -maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. -enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. -enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. -maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - -plugin:catapult.plugins.lockhash -lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. -maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - -plugin:catapult.plugins.locksecret -maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. -minProofSize; 0; uint16_t; Minimum size of a proof in bytes. -maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - -plugin:catapult.plugins.metadata -maxValueSize; 1024; uint16_t; Maximum metadata value size. - -plugin:catapult.plugins.mosaic -maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. -maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. -maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. -mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. -mosaicRentalFee; 500000; Amount; Mosaic rental fee. - -plugin:catapult.plugins.multisig -maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. -maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. -maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - -plugin:catapult.plugins.namespace -maxNameSize; 64; uint8_t; Maximum namespace name size. -maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. -maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. -minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. -maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. -namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. -reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. -namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. -rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. -childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - -plugin:catapult.plugins.restrictionaccount -maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - -plugin:catapult.plugins.restrictionmosaic -maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - -plugin:catapult.plugins.transfer -maxMessageSize; 1024; uint16_t; Maximum transaction message size. - - -config-node.properties -node -port; 7900; unsigned short; Server port. -maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. -enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. -enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. -enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. -enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. -fileDatabaseBatchSize; 100; ; -enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. -transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. -maxHashesPerSyncAttempt; 370; ; -maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. -maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. -shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. -shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. -shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. -shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. -minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. -maxTimeBehindPullTransactionsStart; 5m; ; -transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. -unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. -unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. -connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. -syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. -socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). -socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. -maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. -blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. -blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. -blockDisruptorMaxMemorySize; 300MB; ; -transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. -transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. -transactionDisruptorMaxMemorySize; 20MB; ; -enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. -enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. -maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. -minPartnerNodeVersion; 1.0.0.0; ; -maxPartnerNodeVersion; 1.0.255.255; ; -trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. -localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. -listenInterface; 0.0.0.0; ; - -cache_database -enableStatistics; false -maxOpenFiles; 0 -maxBackgroundThreads; 0 -maxSubcompactionThreads; 0 -blockCacheSize; 0MB -memtableMemoryBudget; 0MB -maxWriteBatchSize; 5MB - -localnode -host; ; string; Node host (leave empty to auto-detect IP). -friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). -version; 1.0.1.0; uint32_t; Node version. -roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. - -outgoing_connections -maxConnections; 10; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - -incoming_connections -maxConnections; 512; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. -backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - -banning -defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. -maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. -keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. -maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. -numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). -readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. -maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. -minTransactionFailuresCountForBan; 8; ; -minTransactionFailuresPercentForBan; 10; ; - - -config-pt.properties -partialtransactions -cacheMaxResponseSize; 5MB -cacheMaxSize; 20MB - - -config-task.properties -logging task -startDelay; 1m -repeatDelay; 10m - -connect peers task for service Finalization -startDelay; 2s -repeatDelay; 1m - -finalization task -startDelay; 2m -repeatDelay; 15s - -pull finalization messages task -startDelay; 3s -repeatDelay; 1s - -pull finalization proof task -startDelay; 10s -repeatDelay; 50s - -harvesting task -startDelay; 30s -repeatDelay; 1s - -network chain height detection -startDelay; 1s -repeatDelay; 15s - -node discovery peers task -startDelay; 1m -minDelay; 1m -maxDelay; 10m -numPhaseOneRounds; 10 -numTransitionRounds; 20 - -node discovery ping task -startDelay; 2m -repeatDelay; 5m - -age peers task for service Readers -startDelay; 1m -repeatDelay; 1m - -batch partial transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Pt -startDelay; 3s -repeatDelay; 1m - -pull partial transactions task -startDelay; 10s -repeatDelay; 3s - -batch transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Sync -startDelay; 1s -repeatDelay; 1m - -pull unconfirmed transactions task -startDelay; 4s -repeatDelay; 3s - -synchronizer task -startDelay; 3s -repeatDelay; 3s - -time synchronization task -startDelay; 1m -minDelay; 3m -maxDelay; 180m -numPhaseOneRounds; 5 -numTransitionRounds; 10 - -static node refresh task -startDelay; 5ms -minDelay; 15s -maxDelay; 24h -numPhaseOneRounds; 20 -numTransitionRounds; 20 - - -config-timesync.properties -timesynchronization -maxNodes; 20 -minImportance; 10'000'000'000 - - -config-user.properties -account -enableDelegatedHarvestersAutoDetection; true - -storage -seedDirectory; ./seed -certificateDirectory; ./cert -dataDirectory; ./data -pluginsDirectory; /usr/catapult/lib -votingKeysDirectory; ./votingkeys diff --git a/test/reports/mainnet-dual-voting/node-config.rst b/test/reports/mainnet-dual-voting/node-config.rst deleted file mode 100644 index 386f3153a..000000000 --- a/test/reports/mainnet-dual-voting/node-config.rst +++ /dev/null @@ -1,888 +0,0 @@ -Symbol Bootstrap Version: CURRENT_VERSION - -config-database.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **database**; - databaseUri; mongodb://db:27017 - databaseName; catapult - maxWriterThreads; 8 - maxDropBatchSize; 10 - writeTimeout; 10m - **plugins**; - catapult.mongo.plugins.accountlink; true - catapult.mongo.plugins.aggregate; true - catapult.mongo.plugins.lockhash; true - catapult.mongo.plugins.locksecret; true - catapult.mongo.plugins.metadata; true - catapult.mongo.plugins.mosaic; true - catapult.mongo.plugins.multisig; true - catapult.mongo.plugins.namespace; true - catapult.mongo.plugins.restrictionaccount; true - catapult.mongo.plugins.restrictionmosaic; true - catapult.mongo.plugins.transfer; true - -config-extensions-broker.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; true - extension.mongo; true - extension.zeromq; true - extension.hashcache; true - -config-extensions-recovery.properties -===================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.filespooling; true - extension.hashcache; true - -config-extensions-server.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.filespooling; true - extension.partialtransaction; true - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.harvesting; true - extension.syncsource; true - extension.diagnostics; true - extension.finalization; true - extension.hashcache; true - extension.networkheight; false - extension.nodediscovery; true - extension.packetserver; true - extension.pluginhandlers; true - extension.sync; true - extension.timesync; true - extension.transactionsink; true - extension.unbondedpruning; true - -config-finalization.properties -============================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **finalization**; - enableVoting; true - enableRevoteOnBoot; false - size; 10'000 - threshold; 7'000 - stepDuration; 5m - shortLivedCacheMessageDuration; 10m - messageSynchronizationMaxResponseSize; 20MB - maxHashesPerPoint; 256 - prevoteBlocksMultiple; 4 - unfinalizedBlocksDuration; 0m - -config-harvesting.properties -============================ -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **harvesting**; ; ; - harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. - harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. - enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. - maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. - delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. - beneficiaryAddress; NDQ32MTJICEPJDU45KVN7BAM4A4GI7OARNBUUFY; Address; Address of the account receiving part of the harvested fee. - -config-inflation.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **inflation**; - starting-at-height-2; 0 - starting-at-height-5760; 191997042 - starting-at-height-172799; 183764522 - starting-at-height-435299; 175884998 - starting-at-height-697799; 168343336 - starting-at-height-960299; 161125048 - starting-at-height-1222799; 154216270 - starting-at-height-1485299; 147603728 - starting-at-height-1747799; 141274720 - starting-at-height-2010299; 135217090 - starting-at-height-2272799; 129419202 - starting-at-height-2535299; 123869918 - starting-at-height-2797799; 118558578 - starting-at-height-3060299; 113474978 - starting-at-height-3322799; 108609356 - starting-at-height-3585299; 103952364 - starting-at-height-3847799; 99495056 - starting-at-height-4110299; 95228870 - starting-at-height-4372799; 91145612 - starting-at-height-4635299; 87237436 - starting-at-height-4897799; 83496838 - starting-at-height-5160299; 79916630 - starting-at-height-5422799; 76489934 - starting-at-height-5685299; 73210170 - starting-at-height-5947799; 70071038 - starting-at-height-6210299; 67066506 - starting-at-height-6472799; 64190804 - starting-at-height-6735299; 61438406 - starting-at-height-6997799; 58804028 - starting-at-height-7260299; 56282608 - starting-at-height-7522799; 53869300 - starting-at-height-7785299; 51559472 - starting-at-height-8047799; 49348686 - starting-at-height-8310299; 47232696 - starting-at-height-8572799; 45207434 - starting-at-height-8835299; 43269014 - starting-at-height-9097799; 41413708 - starting-at-height-9360299; 39637956 - starting-at-height-9622799; 37938346 - starting-at-height-9885299; 36311610 - starting-at-height-10147799; 34754628 - starting-at-height-10410299; 33264406 - starting-at-height-10672799; 31838082 - starting-at-height-10935299; 30472918 - starting-at-height-11197799; 29166288 - starting-at-height-11460299; 27915686 - starting-at-height-11722799; 26718706 - starting-at-height-11985299; 25573052 - starting-at-height-12247799; 24476520 - starting-at-height-12510299; 23427008 - starting-at-height-12772799; 22422496 - starting-at-height-13035299; 21461056 - starting-at-height-13297799; 20540840 - starting-at-height-13560299; 19660082 - starting-at-height-13822799; 18817090 - starting-at-height-14085299; 18010244 - starting-at-height-14347799; 17237994 - starting-at-height-14610299; 16498858 - starting-at-height-14872799; 15791412 - starting-at-height-15135299; 15114302 - starting-at-height-15397799; 14466226 - starting-at-height-15660299; 13845938 - starting-at-height-15922799; 13252246 - starting-at-height-16185299; 12684012 - starting-at-height-16447799; 12140142 - starting-at-height-16710299; 11619592 - starting-at-height-16972799; 11121364 - starting-at-height-17235299; 10644498 - starting-at-height-17497799; 10188078 - starting-at-height-17760299; 9751230 - starting-at-height-18022799; 9333114 - starting-at-height-18285299; 8932924 - starting-at-height-18547799; 8549896 - starting-at-height-18810299; 8183290 - starting-at-height-19072799; 7832404 - starting-at-height-19335299; 7496562 - starting-at-height-19597799; 7175122 - starting-at-height-19860299; 6867464 - starting-at-height-20122799; 6573000 - starting-at-height-20385299; 6291160 - starting-at-height-20647799; 6021404 - starting-at-height-20910299; 5763216 - starting-at-height-21172799; 5516100 - starting-at-height-21435299; 5279578 - starting-at-height-21697799; 5053198 - starting-at-height-21960299; 4836526 - starting-at-height-22222799; 4629144 - starting-at-height-22485299; 4430652 - starting-at-height-22747799; 4240674 - starting-at-height-23010299; 4058840 - starting-at-height-23272799; 3884804 - starting-at-height-23535299; 3718230 - starting-at-height-23797799; 3558798 - starting-at-height-24060299; 3406202 - starting-at-height-24322799; 3260150 - starting-at-height-24585299; 3120360 - starting-at-height-24847799; 2986564 - starting-at-height-25110299; 2858506 - starting-at-height-25372799; 2735938 - starting-at-height-25635299; 2618624 - starting-at-height-25897799; 2506342 - starting-at-height-26160299; 2398874 - starting-at-height-26422799; 2296014 - starting-at-height-26685299; 2197564 - starting-at-height-26947799; 2103336 - starting-at-height-27210299; 2013150 - starting-at-height-27472799; 1926828 - starting-at-height-27735299; 1844210 - starting-at-height-27997799; 1765132 - starting-at-height-28260299; 1689446 - starting-at-height-28522799; 1617006 - starting-at-height-28785299; 1547672 - starting-at-height-29047799; 1481310 - starting-at-height-29310299; 1417794 - starting-at-height-29572799; 1357000 - starting-at-height-29835299; 1298814 - starting-at-height-30097799; 1243124 - starting-at-height-30360299; 1189820 - starting-at-height-30622799; 1138802 - starting-at-height-30885299; 1089972 - starting-at-height-31147799; 1043236 - starting-at-height-31410299; 998504 - starting-at-height-31672799; 955690 - starting-at-height-31935299; 914712 - starting-at-height-32197799; 875490 - starting-at-height-32460299; 837950 - starting-at-height-32722799; 802020 - starting-at-height-32985299; 767630 - starting-at-height-33247799; 734716 - starting-at-height-33510299; 703212 - starting-at-height-33772799; 673060 - starting-at-height-34035299; 644200 - starting-at-height-34297799; 616578 - starting-at-height-34560299; 590140 - starting-at-height-34822799; 564836 - starting-at-height-35085299; 540616 - starting-at-height-35347799; 517436 - starting-at-height-35610299; 495248 - starting-at-height-35872799; 474014 - starting-at-height-36135299; 453688 - starting-at-height-36397799; 434234 - starting-at-height-36660299; 415616 - starting-at-height-36922799; 397794 - starting-at-height-37185299; 380738 - starting-at-height-37447799; 364412 - starting-at-height-37710299; 348786 - starting-at-height-37972799; 333832 - starting-at-height-38235299; 319518 - starting-at-height-38497799; 305816 - starting-at-height-38760299; 292704 - starting-at-height-39022799; 280154 - starting-at-height-39285299; 268140 - starting-at-height-39547799; 256644 - starting-at-height-39810299; 245638 - starting-at-height-40072799; 235106 - starting-at-height-40335299; 225026 - starting-at-height-40597799; 215376 - starting-at-height-40860299; 206142 - starting-at-height-41122799; 197302 - starting-at-height-41385299; 188842 - starting-at-height-41647799; 180744 - starting-at-height-41910299; 172994 - starting-at-height-42172799; 165578 - starting-at-height-42435299; 158478 - starting-at-height-42697799; 151682 - starting-at-height-42960299; 145178 - starting-at-height-43222799; 138954 - starting-at-height-43485299; 132994 - starting-at-height-43747799; 127292 - starting-at-height-44010299; 121834 - starting-at-height-44272799; 116610 - starting-at-height-44535299; 111610 - starting-at-height-44797799; 106824 - starting-at-height-45060299; 102244 - starting-at-height-45322799; 97860 - starting-at-height-45585299; 93664 - starting-at-height-45847799; 89648 - starting-at-height-46110299; 85804 - starting-at-height-46372799; 82124 - starting-at-height-46635299; 78602 - starting-at-height-46897799; 75232 - starting-at-height-47160299; 72006 - starting-at-height-47422799; 68920 - starting-at-height-47685299; 65964 - starting-at-height-47947799; 63136 - starting-at-height-48210299; 60428 - starting-at-height-48472799; 57838 - starting-at-height-48735299; 55358 - starting-at-height-48997799; 52984 - starting-at-height-49260299; 50712 - starting-at-height-49522799; 48538 - starting-at-height-49785299; 46456 - starting-at-height-50047799; 44464 - starting-at-height-50310299; 42558 - starting-at-height-50572799; 40732 - starting-at-height-50835299; 38986 - starting-at-height-51097799; 37314 - starting-at-height-51360299; 35714 - starting-at-height-51622799; 34182 - starting-at-height-51885299; 32716 - starting-at-height-52147799; 31314 - starting-at-height-52410299; 29972 - starting-at-height-52672799; 28686 - starting-at-height-52935299; 27456 - starting-at-height-53197799; 26278 - starting-at-height-53460299; 25152 - starting-at-height-53722799; 24074 - starting-at-height-53985299; 23042 - starting-at-height-54247799; 22054 - starting-at-height-54510299; 21108 - starting-at-height-54772799; 20202 - starting-at-height-55035299; 19336 - starting-at-height-55297799; 18506 - starting-at-height-55560299; 17714 - starting-at-height-55822799; 16954 - starting-at-height-56085299; 16226 - starting-at-height-56347799; 15532 - starting-at-height-56610299; 14866 - starting-at-height-56872799; 14228 - starting-at-height-57135299; 13618 - starting-at-height-57397799; 13034 - starting-at-height-57660299; 12474 - starting-at-height-57922799; 11940 - starting-at-height-58185299; 11428 - starting-at-height-58447799; 10938 - starting-at-height-58710299; 10468 - starting-at-height-58972799; 10020 - starting-at-height-59235299; 9590 - starting-at-height-59497799; 9178 - starting-at-height-59760299; 8786 - starting-at-height-60022799; 8408 - starting-at-height-60285299; 8048 - starting-at-height-60547799; 7702 - starting-at-height-60810299; 7372 - starting-at-height-61072799; 7056 - starting-at-height-61335299; 6754 - starting-at-height-61597799; 6464 - starting-at-height-61860299; 6186 - starting-at-height-62122799; 5922 - starting-at-height-62385299; 5668 - starting-at-height-62647799; 5424 - starting-at-height-62910299; 5192 - starting-at-height-63172799; 4970 - starting-at-height-63435299; 4756 - starting-at-height-63697799; 4552 - starting-at-height-63960299; 4356 - starting-at-height-64222799; 4170 - starting-at-height-64485299; 3992 - starting-at-height-64747799; 3820 - starting-at-height-65010299; 3656 - starting-at-height-65272799; 3500 - starting-at-height-65535299; 3350 - starting-at-height-65797799; 3206 - starting-at-height-66060299; 3068 - starting-at-height-66322799; 2936 - starting-at-height-66585299; 2810 - starting-at-height-66847799; 2690 - starting-at-height-67110299; 2574 - starting-at-height-67372799; 2464 - starting-at-height-67635299; 2358 - starting-at-height-67897799; 2258 - starting-at-height-68160299; 2160 - starting-at-height-68422799; 2068 - starting-at-height-68685299; 1980 - starting-at-height-68947799; 1894 - starting-at-height-69210299; 1812 - starting-at-height-69472799; 1736 - starting-at-height-69735299; 1660 - starting-at-height-69997799; 1590 - starting-at-height-70260299; 1522 - starting-at-height-70522799; 1456 - starting-at-height-70785299; 1394 - starting-at-height-71047799; 1334 - starting-at-height-71310299; 1276 - starting-at-height-71572799; 1222 - starting-at-height-71835299; 1170 - starting-at-height-72097799; 1120 - starting-at-height-72360299; 1072 - starting-at-height-72622799; 1026 - starting-at-height-72885299; 982 - starting-at-height-73147799; 938 - starting-at-height-73410299; 898 - starting-at-height-73672799; 860 - starting-at-height-73935299; 824 - starting-at-height-74197799; 788 - starting-at-height-74460299; 754 - starting-at-height-74722799; 722 - starting-at-height-74985299; 690 - starting-at-height-75247799; 662 - starting-at-height-75510299; 632 - starting-at-height-75772799; 606 - starting-at-height-76035299; 580 - starting-at-height-76297799; 554 - starting-at-height-76560299; 530 - starting-at-height-76822799; 508 - starting-at-height-77085299; 486 - starting-at-height-77347799; 466 - starting-at-height-77610299; 446 - starting-at-height-77872799; 426 - starting-at-height-78135299; 408 - starting-at-height-78397799; 390 - starting-at-height-78660299; 374 - starting-at-height-78922799; 358 - starting-at-height-79185299; 342 - starting-at-height-79447799; 328 - starting-at-height-79710299; 314 - starting-at-height-79972799; 300 - starting-at-height-80235299; 286 - starting-at-height-80497799; 274 - starting-at-height-80760299; 262 - starting-at-height-81022799; 252 - starting-at-height-81285299; 240 - starting-at-height-81547799; 230 - starting-at-height-81810299; 220 - starting-at-height-82072799; 210 - starting-at-height-82335299; 202 - starting-at-height-82597799; 194 - starting-at-height-82860299; 184 - starting-at-height-83122799; 176 - starting-at-height-83385299; 170 - starting-at-height-83647799; 162 - starting-at-height-83910299; 154 - starting-at-height-84172799; 148 - starting-at-height-84435299; 142 - starting-at-height-84697799; 136 - starting-at-height-84960299; 130 - starting-at-height-85222799; 124 - starting-at-height-85485299; 118 - starting-at-height-85747799; 114 - starting-at-height-86010299; 108 - starting-at-height-86272799; 104 - starting-at-height-86535299; 100 - starting-at-height-86797799; 96 - starting-at-height-87060299; 92 - starting-at-height-87322799; 88 - starting-at-height-87585299; 84 - starting-at-height-87847799; 80 - starting-at-height-88110299; 76 - starting-at-height-88372799; 72 - starting-at-height-88635299; 70 - starting-at-height-88897799; 66 - starting-at-height-89160299; 64 - starting-at-height-89422799; 62 - starting-at-height-89685299; 58 - starting-at-height-89947799; 56 - starting-at-height-90210299; 54 - starting-at-height-90472799; 52 - starting-at-height-90735299; 48 - starting-at-height-90997799; 46 - starting-at-height-91260299; 44 - starting-at-height-91522799; 42 - starting-at-height-91785299; 40 - starting-at-height-92047799; 40 - starting-at-height-92310299; 38 - starting-at-height-92572799; 36 - starting-at-height-92835299; 34 - starting-at-height-93097799; 32 - starting-at-height-93360299; 32 - starting-at-height-93622799; 30 - starting-at-height-93885299; 28 - starting-at-height-94147799; 28 - starting-at-height-94410299; 26 - starting-at-height-94672799; 24 - starting-at-height-94935299; 24 - starting-at-height-95197799; 22 - starting-at-height-95460299; 22 - starting-at-height-95722799; 20 - starting-at-height-95985299; 20 - starting-at-height-96247799; 18 - starting-at-height-96510299; 18 - starting-at-height-96772799; 18 - starting-at-height-97035299; 16 - starting-at-height-97297799; 16 - starting-at-height-97560299; 14 - starting-at-height-97822799; 14 - starting-at-height-98085299; 14 - starting-at-height-98347799; 12 - starting-at-height-98610299; 12 - starting-at-height-98872799; 12 - starting-at-height-99135299; 12 - starting-at-height-99397799; 10 - starting-at-height-99660299; 10 - starting-at-height-99922799; 10 - starting-at-height-100185299; 10 - starting-at-height-100447799; 8 - starting-at-height-100710299; 8 - starting-at-height-100972799; 8 - starting-at-height-101235299; 8 - starting-at-height-101497799; 8 - starting-at-height-101760299; 6 - starting-at-height-102022799; 6 - starting-at-height-102285299; 6 - starting-at-height-102547799; 6 - starting-at-height-102810299; 6 - starting-at-height-103072799; 6 - starting-at-height-103335299; 6 - starting-at-height-103597799; 4 - starting-at-height-103860299; 4 - starting-at-height-104122799; 4 - starting-at-height-104385299; 4 - starting-at-height-104647799; 4 - starting-at-height-104910299; 4 - starting-at-height-105172799; 4 - starting-at-height-105435299; 4 - starting-at-height-105697799; 4 - starting-at-height-105960299; 2 - starting-at-height-106222799; 2 - starting-at-height-106485299; 2 - starting-at-height-106747799; 2 - starting-at-height-107010299; 2 - starting-at-height-107272799; 2 - starting-at-height-107535299; 2 - starting-at-height-107797799; 2 - starting-at-height-108060299; 2 - starting-at-height-108322799; 2 - starting-at-height-108585299; 2 - starting-at-height-108847799; 2 - starting-at-height-109110299; 2 - starting-at-height-109372799; 2 - starting-at-height-109635299; 2 - starting-at-height-109897799; 2 - starting-at-height-110160299; 1 - starting-at-height-110422799; 0 - -config-logging-broker.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_broker%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-recovery.properties -================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_recovery%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-server.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_server%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-messaging.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **messaging**; - subscriberPort; 7902 - listenInterface; 0.0.0.0 - -config-network.properties -========================= -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **network**; ; ; - identifier; public; NetworkIdentifier; Network identifier. - nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. - nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. - generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; - epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. - **chain**; ; ; - enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. - enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. - currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. - harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. - blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. - blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. - importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. - importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. - maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. - maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. - defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. - maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. - maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. - initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. - maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. - totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. - minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. - votingSetGrouping; 1440; ; - maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. - minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. - maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. - harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. - harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. - harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. - maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - **plugin:catapult.plugins.accountlink**; - dummy; to trigger plugin load - **plugin:catapult.plugins.aggregate**; ; ; - maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. - maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. - enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. - enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. - maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - **plugin:catapult.plugins.lockhash**; ; ; - lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. - maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - **plugin:catapult.plugins.locksecret**; ; ; - maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. - minProofSize; 0; uint16_t; Minimum size of a proof in bytes. - maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - **plugin:catapult.plugins.metadata**; ; ; - maxValueSize; 1024; uint16_t; Maximum metadata value size. - **plugin:catapult.plugins.mosaic**; ; ; - maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. - maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. - maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. - mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. - mosaicRentalFee; 500000; Amount; Mosaic rental fee. - **plugin:catapult.plugins.multisig**; ; ; - maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. - maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. - maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - **plugin:catapult.plugins.namespace**; ; ; - maxNameSize; 64; uint8_t; Maximum namespace name size. - maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. - maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. - minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. - maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. - namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. - reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. - namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. - rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. - childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - **plugin:catapult.plugins.restrictionaccount**; ; ; - maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - **plugin:catapult.plugins.restrictionmosaic**; ; ; - maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - **plugin:catapult.plugins.transfer**; ; ; - maxMessageSize; 1024; uint16_t; Maximum transaction message size. - -config-node.properties -====================== -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **node**; ; ; - port; 7900; unsigned short; Server port. - maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. - enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. - enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. - enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. - enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. - fileDatabaseBatchSize; 100; ; - enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. - transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. - maxHashesPerSyncAttempt; 370; ; - maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. - maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. - shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. - shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. - shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. - shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. - minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. - maxTimeBehindPullTransactionsStart; 5m; ; - transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. - unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. - unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. - connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. - syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. - socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). - socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. - maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. - blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. - blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. - blockDisruptorMaxMemorySize; 300MB; ; - transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. - transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. - transactionDisruptorMaxMemorySize; 20MB; ; - enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. - enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. - maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. - minPartnerNodeVersion; 1.0.0.0; ; - maxPartnerNodeVersion; 1.0.255.255; ; - trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. - localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. - listenInterface; 0.0.0.0; ; - **cache_database**; - enableStatistics; false - maxOpenFiles; 0 - maxBackgroundThreads; 0 - maxSubcompactionThreads; 0 - blockCacheSize; 0MB - memtableMemoryBudget; 0MB - maxWriteBatchSize; 5MB - **localnode**; ; ; - host; ; string; Node host (leave empty to auto-detect IP). - friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). - version; 1.0.1.0; uint32_t; Node version. - roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. - **outgoing_connections**; ; ; - maxConnections; 10; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - **incoming_connections**; ; ; - maxConnections; 512; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - **banning**; ; ; - defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. - maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. - keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. - maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. - numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). - readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. - maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. - minTransactionFailuresCountForBan; 8; ; - minTransactionFailuresPercentForBan; 10; ; - -config-pt.properties -==================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **partialtransactions**; - cacheMaxResponseSize; 5MB - cacheMaxSize; 20MB - -config-task.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **logging task**; - startDelay; 1m - repeatDelay; 10m - **connect peers task for service Finalization**; - startDelay; 2s - repeatDelay; 1m - **finalization task**; - startDelay; 2m - repeatDelay; 15s - **pull finalization messages task**; - startDelay; 3s - repeatDelay; 1s - **pull finalization proof task**; - startDelay; 10s - repeatDelay; 50s - **harvesting task**; - startDelay; 30s - repeatDelay; 1s - **network chain height detection**; - startDelay; 1s - repeatDelay; 15s - **node discovery peers task**; - startDelay; 1m - minDelay; 1m - maxDelay; 10m - numPhaseOneRounds; 10 - numTransitionRounds; 20 - **node discovery ping task**; - startDelay; 2m - repeatDelay; 5m - **age peers task for service Readers**; - startDelay; 1m - repeatDelay; 1m - **batch partial transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Pt**; - startDelay; 3s - repeatDelay; 1m - **pull partial transactions task**; - startDelay; 10s - repeatDelay; 3s - **batch transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Sync**; - startDelay; 1s - repeatDelay; 1m - **pull unconfirmed transactions task**; - startDelay; 4s - repeatDelay; 3s - **synchronizer task**; - startDelay; 3s - repeatDelay; 3s - **time synchronization task**; - startDelay; 1m - minDelay; 3m - maxDelay; 180m - numPhaseOneRounds; 5 - numTransitionRounds; 10 - **static node refresh task**; - startDelay; 5ms - minDelay; 15s - maxDelay; 24h - numPhaseOneRounds; 20 - numTransitionRounds; 20 - -config-timesync.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **timesynchronization**; - maxNodes; 20 - minImportance; 10'000'000'000 - -config-user.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **account**; - enableDelegatedHarvestersAutoDetection; true - **storage**; - seedDirectory; ./seed - certificateDirectory; ./cert - dataDirectory; ./data - pluginsDirectory; /usr/catapult/lib - votingKeysDirectory; ./votingkeys diff --git a/test/reports/mainnet-dual-voting/rest-gateway-rest.json b/test/reports/mainnet-dual-voting/rest-gateway-rest.json deleted file mode 100644 index 060614d72..000000000 --- a/test/reports/mainnet-dual-voting/rest-gateway-rest.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "network": { - "name": "public", - "description": "catapult public main network" - }, - "port": 3000, - "crossDomain": { - "allowedHosts": [ - "*" - ], - "allowedMethods": [ - "GET", - "POST", - "PUT", - "OPTIONS" - ] - }, - "extensions": [ - "accountLink", - "aggregate", - "lockHash", - "lockSecret", - "mosaic", - "metadata", - "multisig", - "namespace", - "receipts", - "restrictions", - "transfer", - "cmc" - ], - "db": { - "url": "mongodb://db:27017/", - "name": "catapult", - "pageSizeMin": 10, - "pageSizeMax": 100, - "maxConnectionAttempts": 15, - "baseRetryDelay": 750, - "connectionPoolSize": 10 - }, - "apiNode": { - "host": "node", - "port": 7900, - "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", - "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", - "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", - "timeout": 1000, - "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", - "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" - }, - "websocket": { - "mq": { - "host": "broker", - "port": 7902, - "monitorInterval": 500, - "connectTimeout": 10000, - "monitorLoggingThrottle": 60000, - "maxSubscriptions": 300 - }, - "allowOptionalAddress": true - }, - "throttling": { - "burst": 80, - "rate": 60 - }, - "logging": { - "console": { - "formats": [ - "colorize", - "simple" - ], - "level": "verbose", - "handleExceptions": true - }, - "file": { - "formats": [ - "prettyPrint" - ], - "level": "verbose", - "handleExceptions": true, - "filename": "/symbol-workdir/logs/catapult-rest.log", - "maxsize": 20971520, - "maxFiles": 100 - } - }, - "numBlocksTransactionFeeStats": 300, - "deployment": { - "deploymentTool": "symbol-bootstrap", - "deploymentToolVersion": "abc", - "lastUpdatedDate": "2021-05-23" - } -} diff --git a/test/reports/mainnet-dual/node-config.csv b/test/reports/mainnet-dual/node-config.csv deleted file mode 100644 index f1cf96446..000000000 --- a/test/reports/mainnet-dual/node-config.csv +++ /dev/null @@ -1,865 +0,0 @@ -symbol-bootstrap-version; CURRENT_VERSION - -config-database.properties -database -databaseUri; mongodb://db:27017 -databaseName; catapult -maxWriterThreads; 8 -maxDropBatchSize; 10 -writeTimeout; 10m - -plugins -catapult.mongo.plugins.accountlink; true -catapult.mongo.plugins.aggregate; true -catapult.mongo.plugins.lockhash; true -catapult.mongo.plugins.locksecret; true -catapult.mongo.plugins.metadata; true -catapult.mongo.plugins.mosaic; true -catapult.mongo.plugins.multisig; true -catapult.mongo.plugins.namespace; true -catapult.mongo.plugins.restrictionaccount; true -catapult.mongo.plugins.restrictionmosaic; true -catapult.mongo.plugins.transfer; true - - -config-extensions-broker.properties -extensions -extension.addressextraction; true -extension.mongo; true -extension.zeromq; true -extension.hashcache; true - - -config-extensions-recovery.properties -extensions -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.filespooling; true -extension.hashcache; true - - -config-extensions-server.properties -extensions -extension.filespooling; true -extension.partialtransaction; true -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.harvesting; true -extension.syncsource; true -extension.diagnostics; true -extension.finalization; true -extension.hashcache; true -extension.networkheight; false -extension.nodediscovery; true -extension.packetserver; true -extension.pluginhandlers; true -extension.sync; true -extension.timesync; true -extension.transactionsink; true -extension.unbondedpruning; true - - -config-finalization.properties -finalization -enableVoting; false -enableRevoteOnBoot; false -size; 10'000 -threshold; 7'000 -stepDuration; 5m -shortLivedCacheMessageDuration; 10m -messageSynchronizationMaxResponseSize; 20MB -maxHashesPerPoint; 256 -prevoteBlocksMultiple; 4 -unfinalizedBlocksDuration; 10m - - -config-harvesting.properties -harvesting -harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. -harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. -enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. -maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. -delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. -beneficiaryAddress; NDQ32MTJICEPJDU45KVN7BAM4A4GI7OARNBUUFY; Address; Address of the account receiving part of the harvested fee. - - -config-inflation.properties -inflation -starting-at-height-2; 0 -starting-at-height-5760; 191997042 -starting-at-height-172799; 183764522 -starting-at-height-435299; 175884998 -starting-at-height-697799; 168343336 -starting-at-height-960299; 161125048 -starting-at-height-1222799; 154216270 -starting-at-height-1485299; 147603728 -starting-at-height-1747799; 141274720 -starting-at-height-2010299; 135217090 -starting-at-height-2272799; 129419202 -starting-at-height-2535299; 123869918 -starting-at-height-2797799; 118558578 -starting-at-height-3060299; 113474978 -starting-at-height-3322799; 108609356 -starting-at-height-3585299; 103952364 -starting-at-height-3847799; 99495056 -starting-at-height-4110299; 95228870 -starting-at-height-4372799; 91145612 -starting-at-height-4635299; 87237436 -starting-at-height-4897799; 83496838 -starting-at-height-5160299; 79916630 -starting-at-height-5422799; 76489934 -starting-at-height-5685299; 73210170 -starting-at-height-5947799; 70071038 -starting-at-height-6210299; 67066506 -starting-at-height-6472799; 64190804 -starting-at-height-6735299; 61438406 -starting-at-height-6997799; 58804028 -starting-at-height-7260299; 56282608 -starting-at-height-7522799; 53869300 -starting-at-height-7785299; 51559472 -starting-at-height-8047799; 49348686 -starting-at-height-8310299; 47232696 -starting-at-height-8572799; 45207434 -starting-at-height-8835299; 43269014 -starting-at-height-9097799; 41413708 -starting-at-height-9360299; 39637956 -starting-at-height-9622799; 37938346 -starting-at-height-9885299; 36311610 -starting-at-height-10147799; 34754628 -starting-at-height-10410299; 33264406 -starting-at-height-10672799; 31838082 -starting-at-height-10935299; 30472918 -starting-at-height-11197799; 29166288 -starting-at-height-11460299; 27915686 -starting-at-height-11722799; 26718706 -starting-at-height-11985299; 25573052 -starting-at-height-12247799; 24476520 -starting-at-height-12510299; 23427008 -starting-at-height-12772799; 22422496 -starting-at-height-13035299; 21461056 -starting-at-height-13297799; 20540840 -starting-at-height-13560299; 19660082 -starting-at-height-13822799; 18817090 -starting-at-height-14085299; 18010244 -starting-at-height-14347799; 17237994 -starting-at-height-14610299; 16498858 -starting-at-height-14872799; 15791412 -starting-at-height-15135299; 15114302 -starting-at-height-15397799; 14466226 -starting-at-height-15660299; 13845938 -starting-at-height-15922799; 13252246 -starting-at-height-16185299; 12684012 -starting-at-height-16447799; 12140142 -starting-at-height-16710299; 11619592 -starting-at-height-16972799; 11121364 -starting-at-height-17235299; 10644498 -starting-at-height-17497799; 10188078 -starting-at-height-17760299; 9751230 -starting-at-height-18022799; 9333114 -starting-at-height-18285299; 8932924 -starting-at-height-18547799; 8549896 -starting-at-height-18810299; 8183290 -starting-at-height-19072799; 7832404 -starting-at-height-19335299; 7496562 -starting-at-height-19597799; 7175122 -starting-at-height-19860299; 6867464 -starting-at-height-20122799; 6573000 -starting-at-height-20385299; 6291160 -starting-at-height-20647799; 6021404 -starting-at-height-20910299; 5763216 -starting-at-height-21172799; 5516100 -starting-at-height-21435299; 5279578 -starting-at-height-21697799; 5053198 -starting-at-height-21960299; 4836526 -starting-at-height-22222799; 4629144 -starting-at-height-22485299; 4430652 -starting-at-height-22747799; 4240674 -starting-at-height-23010299; 4058840 -starting-at-height-23272799; 3884804 -starting-at-height-23535299; 3718230 -starting-at-height-23797799; 3558798 -starting-at-height-24060299; 3406202 -starting-at-height-24322799; 3260150 -starting-at-height-24585299; 3120360 -starting-at-height-24847799; 2986564 -starting-at-height-25110299; 2858506 -starting-at-height-25372799; 2735938 -starting-at-height-25635299; 2618624 -starting-at-height-25897799; 2506342 -starting-at-height-26160299; 2398874 -starting-at-height-26422799; 2296014 -starting-at-height-26685299; 2197564 -starting-at-height-26947799; 2103336 -starting-at-height-27210299; 2013150 -starting-at-height-27472799; 1926828 -starting-at-height-27735299; 1844210 -starting-at-height-27997799; 1765132 -starting-at-height-28260299; 1689446 -starting-at-height-28522799; 1617006 -starting-at-height-28785299; 1547672 -starting-at-height-29047799; 1481310 -starting-at-height-29310299; 1417794 -starting-at-height-29572799; 1357000 -starting-at-height-29835299; 1298814 -starting-at-height-30097799; 1243124 -starting-at-height-30360299; 1189820 -starting-at-height-30622799; 1138802 -starting-at-height-30885299; 1089972 -starting-at-height-31147799; 1043236 -starting-at-height-31410299; 998504 -starting-at-height-31672799; 955690 -starting-at-height-31935299; 914712 -starting-at-height-32197799; 875490 -starting-at-height-32460299; 837950 -starting-at-height-32722799; 802020 -starting-at-height-32985299; 767630 -starting-at-height-33247799; 734716 -starting-at-height-33510299; 703212 -starting-at-height-33772799; 673060 -starting-at-height-34035299; 644200 -starting-at-height-34297799; 616578 -starting-at-height-34560299; 590140 -starting-at-height-34822799; 564836 -starting-at-height-35085299; 540616 -starting-at-height-35347799; 517436 -starting-at-height-35610299; 495248 -starting-at-height-35872799; 474014 -starting-at-height-36135299; 453688 -starting-at-height-36397799; 434234 -starting-at-height-36660299; 415616 -starting-at-height-36922799; 397794 -starting-at-height-37185299; 380738 -starting-at-height-37447799; 364412 -starting-at-height-37710299; 348786 -starting-at-height-37972799; 333832 -starting-at-height-38235299; 319518 -starting-at-height-38497799; 305816 -starting-at-height-38760299; 292704 -starting-at-height-39022799; 280154 -starting-at-height-39285299; 268140 -starting-at-height-39547799; 256644 -starting-at-height-39810299; 245638 -starting-at-height-40072799; 235106 -starting-at-height-40335299; 225026 -starting-at-height-40597799; 215376 -starting-at-height-40860299; 206142 -starting-at-height-41122799; 197302 -starting-at-height-41385299; 188842 -starting-at-height-41647799; 180744 -starting-at-height-41910299; 172994 -starting-at-height-42172799; 165578 -starting-at-height-42435299; 158478 -starting-at-height-42697799; 151682 -starting-at-height-42960299; 145178 -starting-at-height-43222799; 138954 -starting-at-height-43485299; 132994 -starting-at-height-43747799; 127292 -starting-at-height-44010299; 121834 -starting-at-height-44272799; 116610 -starting-at-height-44535299; 111610 -starting-at-height-44797799; 106824 -starting-at-height-45060299; 102244 -starting-at-height-45322799; 97860 -starting-at-height-45585299; 93664 -starting-at-height-45847799; 89648 -starting-at-height-46110299; 85804 -starting-at-height-46372799; 82124 -starting-at-height-46635299; 78602 -starting-at-height-46897799; 75232 -starting-at-height-47160299; 72006 -starting-at-height-47422799; 68920 -starting-at-height-47685299; 65964 -starting-at-height-47947799; 63136 -starting-at-height-48210299; 60428 -starting-at-height-48472799; 57838 -starting-at-height-48735299; 55358 -starting-at-height-48997799; 52984 -starting-at-height-49260299; 50712 -starting-at-height-49522799; 48538 -starting-at-height-49785299; 46456 -starting-at-height-50047799; 44464 -starting-at-height-50310299; 42558 -starting-at-height-50572799; 40732 -starting-at-height-50835299; 38986 -starting-at-height-51097799; 37314 -starting-at-height-51360299; 35714 -starting-at-height-51622799; 34182 -starting-at-height-51885299; 32716 -starting-at-height-52147799; 31314 -starting-at-height-52410299; 29972 -starting-at-height-52672799; 28686 -starting-at-height-52935299; 27456 -starting-at-height-53197799; 26278 -starting-at-height-53460299; 25152 -starting-at-height-53722799; 24074 -starting-at-height-53985299; 23042 -starting-at-height-54247799; 22054 -starting-at-height-54510299; 21108 -starting-at-height-54772799; 20202 -starting-at-height-55035299; 19336 -starting-at-height-55297799; 18506 -starting-at-height-55560299; 17714 -starting-at-height-55822799; 16954 -starting-at-height-56085299; 16226 -starting-at-height-56347799; 15532 -starting-at-height-56610299; 14866 -starting-at-height-56872799; 14228 -starting-at-height-57135299; 13618 -starting-at-height-57397799; 13034 -starting-at-height-57660299; 12474 -starting-at-height-57922799; 11940 -starting-at-height-58185299; 11428 -starting-at-height-58447799; 10938 -starting-at-height-58710299; 10468 -starting-at-height-58972799; 10020 -starting-at-height-59235299; 9590 -starting-at-height-59497799; 9178 -starting-at-height-59760299; 8786 -starting-at-height-60022799; 8408 -starting-at-height-60285299; 8048 -starting-at-height-60547799; 7702 -starting-at-height-60810299; 7372 -starting-at-height-61072799; 7056 -starting-at-height-61335299; 6754 -starting-at-height-61597799; 6464 -starting-at-height-61860299; 6186 -starting-at-height-62122799; 5922 -starting-at-height-62385299; 5668 -starting-at-height-62647799; 5424 -starting-at-height-62910299; 5192 -starting-at-height-63172799; 4970 -starting-at-height-63435299; 4756 -starting-at-height-63697799; 4552 -starting-at-height-63960299; 4356 -starting-at-height-64222799; 4170 -starting-at-height-64485299; 3992 -starting-at-height-64747799; 3820 -starting-at-height-65010299; 3656 -starting-at-height-65272799; 3500 -starting-at-height-65535299; 3350 -starting-at-height-65797799; 3206 -starting-at-height-66060299; 3068 -starting-at-height-66322799; 2936 -starting-at-height-66585299; 2810 -starting-at-height-66847799; 2690 -starting-at-height-67110299; 2574 -starting-at-height-67372799; 2464 -starting-at-height-67635299; 2358 -starting-at-height-67897799; 2258 -starting-at-height-68160299; 2160 -starting-at-height-68422799; 2068 -starting-at-height-68685299; 1980 -starting-at-height-68947799; 1894 -starting-at-height-69210299; 1812 -starting-at-height-69472799; 1736 -starting-at-height-69735299; 1660 -starting-at-height-69997799; 1590 -starting-at-height-70260299; 1522 -starting-at-height-70522799; 1456 -starting-at-height-70785299; 1394 -starting-at-height-71047799; 1334 -starting-at-height-71310299; 1276 -starting-at-height-71572799; 1222 -starting-at-height-71835299; 1170 -starting-at-height-72097799; 1120 -starting-at-height-72360299; 1072 -starting-at-height-72622799; 1026 -starting-at-height-72885299; 982 -starting-at-height-73147799; 938 -starting-at-height-73410299; 898 -starting-at-height-73672799; 860 -starting-at-height-73935299; 824 -starting-at-height-74197799; 788 -starting-at-height-74460299; 754 -starting-at-height-74722799; 722 -starting-at-height-74985299; 690 -starting-at-height-75247799; 662 -starting-at-height-75510299; 632 -starting-at-height-75772799; 606 -starting-at-height-76035299; 580 -starting-at-height-76297799; 554 -starting-at-height-76560299; 530 -starting-at-height-76822799; 508 -starting-at-height-77085299; 486 -starting-at-height-77347799; 466 -starting-at-height-77610299; 446 -starting-at-height-77872799; 426 -starting-at-height-78135299; 408 -starting-at-height-78397799; 390 -starting-at-height-78660299; 374 -starting-at-height-78922799; 358 -starting-at-height-79185299; 342 -starting-at-height-79447799; 328 -starting-at-height-79710299; 314 -starting-at-height-79972799; 300 -starting-at-height-80235299; 286 -starting-at-height-80497799; 274 -starting-at-height-80760299; 262 -starting-at-height-81022799; 252 -starting-at-height-81285299; 240 -starting-at-height-81547799; 230 -starting-at-height-81810299; 220 -starting-at-height-82072799; 210 -starting-at-height-82335299; 202 -starting-at-height-82597799; 194 -starting-at-height-82860299; 184 -starting-at-height-83122799; 176 -starting-at-height-83385299; 170 -starting-at-height-83647799; 162 -starting-at-height-83910299; 154 -starting-at-height-84172799; 148 -starting-at-height-84435299; 142 -starting-at-height-84697799; 136 -starting-at-height-84960299; 130 -starting-at-height-85222799; 124 -starting-at-height-85485299; 118 -starting-at-height-85747799; 114 -starting-at-height-86010299; 108 -starting-at-height-86272799; 104 -starting-at-height-86535299; 100 -starting-at-height-86797799; 96 -starting-at-height-87060299; 92 -starting-at-height-87322799; 88 -starting-at-height-87585299; 84 -starting-at-height-87847799; 80 -starting-at-height-88110299; 76 -starting-at-height-88372799; 72 -starting-at-height-88635299; 70 -starting-at-height-88897799; 66 -starting-at-height-89160299; 64 -starting-at-height-89422799; 62 -starting-at-height-89685299; 58 -starting-at-height-89947799; 56 -starting-at-height-90210299; 54 -starting-at-height-90472799; 52 -starting-at-height-90735299; 48 -starting-at-height-90997799; 46 -starting-at-height-91260299; 44 -starting-at-height-91522799; 42 -starting-at-height-91785299; 40 -starting-at-height-92047799; 40 -starting-at-height-92310299; 38 -starting-at-height-92572799; 36 -starting-at-height-92835299; 34 -starting-at-height-93097799; 32 -starting-at-height-93360299; 32 -starting-at-height-93622799; 30 -starting-at-height-93885299; 28 -starting-at-height-94147799; 28 -starting-at-height-94410299; 26 -starting-at-height-94672799; 24 -starting-at-height-94935299; 24 -starting-at-height-95197799; 22 -starting-at-height-95460299; 22 -starting-at-height-95722799; 20 -starting-at-height-95985299; 20 -starting-at-height-96247799; 18 -starting-at-height-96510299; 18 -starting-at-height-96772799; 18 -starting-at-height-97035299; 16 -starting-at-height-97297799; 16 -starting-at-height-97560299; 14 -starting-at-height-97822799; 14 -starting-at-height-98085299; 14 -starting-at-height-98347799; 12 -starting-at-height-98610299; 12 -starting-at-height-98872799; 12 -starting-at-height-99135299; 12 -starting-at-height-99397799; 10 -starting-at-height-99660299; 10 -starting-at-height-99922799; 10 -starting-at-height-100185299; 10 -starting-at-height-100447799; 8 -starting-at-height-100710299; 8 -starting-at-height-100972799; 8 -starting-at-height-101235299; 8 -starting-at-height-101497799; 8 -starting-at-height-101760299; 6 -starting-at-height-102022799; 6 -starting-at-height-102285299; 6 -starting-at-height-102547799; 6 -starting-at-height-102810299; 6 -starting-at-height-103072799; 6 -starting-at-height-103335299; 6 -starting-at-height-103597799; 4 -starting-at-height-103860299; 4 -starting-at-height-104122799; 4 -starting-at-height-104385299; 4 -starting-at-height-104647799; 4 -starting-at-height-104910299; 4 -starting-at-height-105172799; 4 -starting-at-height-105435299; 4 -starting-at-height-105697799; 4 -starting-at-height-105960299; 2 -starting-at-height-106222799; 2 -starting-at-height-106485299; 2 -starting-at-height-106747799; 2 -starting-at-height-107010299; 2 -starting-at-height-107272799; 2 -starting-at-height-107535299; 2 -starting-at-height-107797799; 2 -starting-at-height-108060299; 2 -starting-at-height-108322799; 2 -starting-at-height-108585299; 2 -starting-at-height-108847799; 2 -starting-at-height-109110299; 2 -starting-at-height-109372799; 2 -starting-at-height-109635299; 2 -starting-at-height-109897799; 2 -starting-at-height-110160299; 1 -starting-at-height-110422799; 0 - - -config-logging-broker.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_broker%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-recovery.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_recovery%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-server.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_server%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-messaging.properties -messaging -subscriberPort; 7902 -listenInterface; 0.0.0.0 - - -config-network.properties -network -identifier; public; NetworkIdentifier; Network identifier. -nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. -nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. -generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; -epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. - -chain -enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. -enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. -currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. -harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. -blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. -blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. -importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. -importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. -maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. -maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. -defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. -maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. -maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. -initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. -maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. -totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. -minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. -votingSetGrouping; 1440; ; -maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. -minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. -maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. -harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. -harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. -harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. -maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - -plugin:catapult.plugins.accountlink -dummy; to trigger plugin load - -plugin:catapult.plugins.aggregate -maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. -maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. -enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. -enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. -maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - -plugin:catapult.plugins.lockhash -lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. -maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - -plugin:catapult.plugins.locksecret -maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. -minProofSize; 0; uint16_t; Minimum size of a proof in bytes. -maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - -plugin:catapult.plugins.metadata -maxValueSize; 1024; uint16_t; Maximum metadata value size. - -plugin:catapult.plugins.mosaic -maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. -maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. -maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. -mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. -mosaicRentalFee; 500000; Amount; Mosaic rental fee. - -plugin:catapult.plugins.multisig -maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. -maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. -maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - -plugin:catapult.plugins.namespace -maxNameSize; 64; uint8_t; Maximum namespace name size. -maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. -maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. -minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. -maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. -namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. -reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. -namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. -rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. -childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - -plugin:catapult.plugins.restrictionaccount -maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - -plugin:catapult.plugins.restrictionmosaic -maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - -plugin:catapult.plugins.transfer -maxMessageSize; 1024; uint16_t; Maximum transaction message size. - - -config-node.properties -node -port; 7900; unsigned short; Server port. -maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. -enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. -enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. -enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. -enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. -fileDatabaseBatchSize; 100; ; -enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. -transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. -maxHashesPerSyncAttempt; 370; ; -maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. -maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. -shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. -shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. -shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. -shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. -minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. -maxTimeBehindPullTransactionsStart; 5m; ; -transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. -unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. -unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. -connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. -syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. -socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). -socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. -maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. -blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. -blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. -blockDisruptorMaxMemorySize; 300MB; ; -transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. -transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. -transactionDisruptorMaxMemorySize; 20MB; ; -enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. -enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. -maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. -minPartnerNodeVersion; 1.0.0.0; ; -maxPartnerNodeVersion; 1.0.255.255; ; -trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. -localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. -listenInterface; 0.0.0.0; ; - -cache_database -enableStatistics; false -maxOpenFiles; 0 -maxBackgroundThreads; 0 -maxSubcompactionThreads; 0 -blockCacheSize; 0MB -memtableMemoryBudget; 0MB -maxWriteBatchSize; 5MB - -localnode -host; ; string; Node host (leave empty to auto-detect IP). -friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). -version; 1.0.1.0; uint32_t; Node version. -roles; Peer,Api; ionet::NodeRoles; Node roles. - -outgoing_connections -maxConnections; 10; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - -incoming_connections -maxConnections; 512; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. -backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - -banning -defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. -maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. -keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. -maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. -numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). -readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. -maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. -minTransactionFailuresCountForBan; 8; ; -minTransactionFailuresPercentForBan; 10; ; - - -config-pt.properties -partialtransactions -cacheMaxResponseSize; 5MB -cacheMaxSize; 20MB - - -config-task.properties -logging task -startDelay; 1m -repeatDelay; 10m - -connect peers task for service Finalization -startDelay; 2s -repeatDelay; 1m - -finalization task -startDelay; 2m -repeatDelay; 15s - -pull finalization messages task -startDelay; 3s -repeatDelay; 1s - -pull finalization proof task -startDelay; 10s -repeatDelay; 50s - -harvesting task -startDelay; 30s -repeatDelay; 1s - -network chain height detection -startDelay; 1s -repeatDelay; 15s - -node discovery peers task -startDelay; 1m -minDelay; 1m -maxDelay; 10m -numPhaseOneRounds; 10 -numTransitionRounds; 20 - -node discovery ping task -startDelay; 2m -repeatDelay; 5m - -age peers task for service Readers -startDelay; 1m -repeatDelay; 1m - -batch partial transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Pt -startDelay; 3s -repeatDelay; 1m - -pull partial transactions task -startDelay; 10s -repeatDelay; 3s - -batch transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Sync -startDelay; 1s -repeatDelay; 1m - -pull unconfirmed transactions task -startDelay; 4s -repeatDelay; 3s - -synchronizer task -startDelay; 3s -repeatDelay; 3s - -time synchronization task -startDelay; 1m -minDelay; 3m -maxDelay; 180m -numPhaseOneRounds; 5 -numTransitionRounds; 10 - -static node refresh task -startDelay; 5ms -minDelay; 15s -maxDelay; 24h -numPhaseOneRounds; 20 -numTransitionRounds; 20 - - -config-timesync.properties -timesynchronization -maxNodes; 20 -minImportance; 10'000'000'000 - - -config-user.properties -account -enableDelegatedHarvestersAutoDetection; true - -storage -seedDirectory; ./seed -certificateDirectory; ./cert -dataDirectory; ./data -pluginsDirectory; /usr/catapult/lib -votingKeysDirectory; ./votingkeys diff --git a/test/reports/mainnet-dual/node-config.rst b/test/reports/mainnet-dual/node-config.rst deleted file mode 100644 index 8a3f4e515..000000000 --- a/test/reports/mainnet-dual/node-config.rst +++ /dev/null @@ -1,888 +0,0 @@ -Symbol Bootstrap Version: CURRENT_VERSION - -config-database.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **database**; - databaseUri; mongodb://db:27017 - databaseName; catapult - maxWriterThreads; 8 - maxDropBatchSize; 10 - writeTimeout; 10m - **plugins**; - catapult.mongo.plugins.accountlink; true - catapult.mongo.plugins.aggregate; true - catapult.mongo.plugins.lockhash; true - catapult.mongo.plugins.locksecret; true - catapult.mongo.plugins.metadata; true - catapult.mongo.plugins.mosaic; true - catapult.mongo.plugins.multisig; true - catapult.mongo.plugins.namespace; true - catapult.mongo.plugins.restrictionaccount; true - catapult.mongo.plugins.restrictionmosaic; true - catapult.mongo.plugins.transfer; true - -config-extensions-broker.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; true - extension.mongo; true - extension.zeromq; true - extension.hashcache; true - -config-extensions-recovery.properties -===================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.filespooling; true - extension.hashcache; true - -config-extensions-server.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.filespooling; true - extension.partialtransaction; true - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.harvesting; true - extension.syncsource; true - extension.diagnostics; true - extension.finalization; true - extension.hashcache; true - extension.networkheight; false - extension.nodediscovery; true - extension.packetserver; true - extension.pluginhandlers; true - extension.sync; true - extension.timesync; true - extension.transactionsink; true - extension.unbondedpruning; true - -config-finalization.properties -============================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **finalization**; - enableVoting; false - enableRevoteOnBoot; false - size; 10'000 - threshold; 7'000 - stepDuration; 5m - shortLivedCacheMessageDuration; 10m - messageSynchronizationMaxResponseSize; 20MB - maxHashesPerPoint; 256 - prevoteBlocksMultiple; 4 - unfinalizedBlocksDuration; 10m - -config-harvesting.properties -============================ -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **harvesting**; ; ; - harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. - harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. - enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. - maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. - delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. - beneficiaryAddress; NDQ32MTJICEPJDU45KVN7BAM4A4GI7OARNBUUFY; Address; Address of the account receiving part of the harvested fee. - -config-inflation.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **inflation**; - starting-at-height-2; 0 - starting-at-height-5760; 191997042 - starting-at-height-172799; 183764522 - starting-at-height-435299; 175884998 - starting-at-height-697799; 168343336 - starting-at-height-960299; 161125048 - starting-at-height-1222799; 154216270 - starting-at-height-1485299; 147603728 - starting-at-height-1747799; 141274720 - starting-at-height-2010299; 135217090 - starting-at-height-2272799; 129419202 - starting-at-height-2535299; 123869918 - starting-at-height-2797799; 118558578 - starting-at-height-3060299; 113474978 - starting-at-height-3322799; 108609356 - starting-at-height-3585299; 103952364 - starting-at-height-3847799; 99495056 - starting-at-height-4110299; 95228870 - starting-at-height-4372799; 91145612 - starting-at-height-4635299; 87237436 - starting-at-height-4897799; 83496838 - starting-at-height-5160299; 79916630 - starting-at-height-5422799; 76489934 - starting-at-height-5685299; 73210170 - starting-at-height-5947799; 70071038 - starting-at-height-6210299; 67066506 - starting-at-height-6472799; 64190804 - starting-at-height-6735299; 61438406 - starting-at-height-6997799; 58804028 - starting-at-height-7260299; 56282608 - starting-at-height-7522799; 53869300 - starting-at-height-7785299; 51559472 - starting-at-height-8047799; 49348686 - starting-at-height-8310299; 47232696 - starting-at-height-8572799; 45207434 - starting-at-height-8835299; 43269014 - starting-at-height-9097799; 41413708 - starting-at-height-9360299; 39637956 - starting-at-height-9622799; 37938346 - starting-at-height-9885299; 36311610 - starting-at-height-10147799; 34754628 - starting-at-height-10410299; 33264406 - starting-at-height-10672799; 31838082 - starting-at-height-10935299; 30472918 - starting-at-height-11197799; 29166288 - starting-at-height-11460299; 27915686 - starting-at-height-11722799; 26718706 - starting-at-height-11985299; 25573052 - starting-at-height-12247799; 24476520 - starting-at-height-12510299; 23427008 - starting-at-height-12772799; 22422496 - starting-at-height-13035299; 21461056 - starting-at-height-13297799; 20540840 - starting-at-height-13560299; 19660082 - starting-at-height-13822799; 18817090 - starting-at-height-14085299; 18010244 - starting-at-height-14347799; 17237994 - starting-at-height-14610299; 16498858 - starting-at-height-14872799; 15791412 - starting-at-height-15135299; 15114302 - starting-at-height-15397799; 14466226 - starting-at-height-15660299; 13845938 - starting-at-height-15922799; 13252246 - starting-at-height-16185299; 12684012 - starting-at-height-16447799; 12140142 - starting-at-height-16710299; 11619592 - starting-at-height-16972799; 11121364 - starting-at-height-17235299; 10644498 - starting-at-height-17497799; 10188078 - starting-at-height-17760299; 9751230 - starting-at-height-18022799; 9333114 - starting-at-height-18285299; 8932924 - starting-at-height-18547799; 8549896 - starting-at-height-18810299; 8183290 - starting-at-height-19072799; 7832404 - starting-at-height-19335299; 7496562 - starting-at-height-19597799; 7175122 - starting-at-height-19860299; 6867464 - starting-at-height-20122799; 6573000 - starting-at-height-20385299; 6291160 - starting-at-height-20647799; 6021404 - starting-at-height-20910299; 5763216 - starting-at-height-21172799; 5516100 - starting-at-height-21435299; 5279578 - starting-at-height-21697799; 5053198 - starting-at-height-21960299; 4836526 - starting-at-height-22222799; 4629144 - starting-at-height-22485299; 4430652 - starting-at-height-22747799; 4240674 - starting-at-height-23010299; 4058840 - starting-at-height-23272799; 3884804 - starting-at-height-23535299; 3718230 - starting-at-height-23797799; 3558798 - starting-at-height-24060299; 3406202 - starting-at-height-24322799; 3260150 - starting-at-height-24585299; 3120360 - starting-at-height-24847799; 2986564 - starting-at-height-25110299; 2858506 - starting-at-height-25372799; 2735938 - starting-at-height-25635299; 2618624 - starting-at-height-25897799; 2506342 - starting-at-height-26160299; 2398874 - starting-at-height-26422799; 2296014 - starting-at-height-26685299; 2197564 - starting-at-height-26947799; 2103336 - starting-at-height-27210299; 2013150 - starting-at-height-27472799; 1926828 - starting-at-height-27735299; 1844210 - starting-at-height-27997799; 1765132 - starting-at-height-28260299; 1689446 - starting-at-height-28522799; 1617006 - starting-at-height-28785299; 1547672 - starting-at-height-29047799; 1481310 - starting-at-height-29310299; 1417794 - starting-at-height-29572799; 1357000 - starting-at-height-29835299; 1298814 - starting-at-height-30097799; 1243124 - starting-at-height-30360299; 1189820 - starting-at-height-30622799; 1138802 - starting-at-height-30885299; 1089972 - starting-at-height-31147799; 1043236 - starting-at-height-31410299; 998504 - starting-at-height-31672799; 955690 - starting-at-height-31935299; 914712 - starting-at-height-32197799; 875490 - starting-at-height-32460299; 837950 - starting-at-height-32722799; 802020 - starting-at-height-32985299; 767630 - starting-at-height-33247799; 734716 - starting-at-height-33510299; 703212 - starting-at-height-33772799; 673060 - starting-at-height-34035299; 644200 - starting-at-height-34297799; 616578 - starting-at-height-34560299; 590140 - starting-at-height-34822799; 564836 - starting-at-height-35085299; 540616 - starting-at-height-35347799; 517436 - starting-at-height-35610299; 495248 - starting-at-height-35872799; 474014 - starting-at-height-36135299; 453688 - starting-at-height-36397799; 434234 - starting-at-height-36660299; 415616 - starting-at-height-36922799; 397794 - starting-at-height-37185299; 380738 - starting-at-height-37447799; 364412 - starting-at-height-37710299; 348786 - starting-at-height-37972799; 333832 - starting-at-height-38235299; 319518 - starting-at-height-38497799; 305816 - starting-at-height-38760299; 292704 - starting-at-height-39022799; 280154 - starting-at-height-39285299; 268140 - starting-at-height-39547799; 256644 - starting-at-height-39810299; 245638 - starting-at-height-40072799; 235106 - starting-at-height-40335299; 225026 - starting-at-height-40597799; 215376 - starting-at-height-40860299; 206142 - starting-at-height-41122799; 197302 - starting-at-height-41385299; 188842 - starting-at-height-41647799; 180744 - starting-at-height-41910299; 172994 - starting-at-height-42172799; 165578 - starting-at-height-42435299; 158478 - starting-at-height-42697799; 151682 - starting-at-height-42960299; 145178 - starting-at-height-43222799; 138954 - starting-at-height-43485299; 132994 - starting-at-height-43747799; 127292 - starting-at-height-44010299; 121834 - starting-at-height-44272799; 116610 - starting-at-height-44535299; 111610 - starting-at-height-44797799; 106824 - starting-at-height-45060299; 102244 - starting-at-height-45322799; 97860 - starting-at-height-45585299; 93664 - starting-at-height-45847799; 89648 - starting-at-height-46110299; 85804 - starting-at-height-46372799; 82124 - starting-at-height-46635299; 78602 - starting-at-height-46897799; 75232 - starting-at-height-47160299; 72006 - starting-at-height-47422799; 68920 - starting-at-height-47685299; 65964 - starting-at-height-47947799; 63136 - starting-at-height-48210299; 60428 - starting-at-height-48472799; 57838 - starting-at-height-48735299; 55358 - starting-at-height-48997799; 52984 - starting-at-height-49260299; 50712 - starting-at-height-49522799; 48538 - starting-at-height-49785299; 46456 - starting-at-height-50047799; 44464 - starting-at-height-50310299; 42558 - starting-at-height-50572799; 40732 - starting-at-height-50835299; 38986 - starting-at-height-51097799; 37314 - starting-at-height-51360299; 35714 - starting-at-height-51622799; 34182 - starting-at-height-51885299; 32716 - starting-at-height-52147799; 31314 - starting-at-height-52410299; 29972 - starting-at-height-52672799; 28686 - starting-at-height-52935299; 27456 - starting-at-height-53197799; 26278 - starting-at-height-53460299; 25152 - starting-at-height-53722799; 24074 - starting-at-height-53985299; 23042 - starting-at-height-54247799; 22054 - starting-at-height-54510299; 21108 - starting-at-height-54772799; 20202 - starting-at-height-55035299; 19336 - starting-at-height-55297799; 18506 - starting-at-height-55560299; 17714 - starting-at-height-55822799; 16954 - starting-at-height-56085299; 16226 - starting-at-height-56347799; 15532 - starting-at-height-56610299; 14866 - starting-at-height-56872799; 14228 - starting-at-height-57135299; 13618 - starting-at-height-57397799; 13034 - starting-at-height-57660299; 12474 - starting-at-height-57922799; 11940 - starting-at-height-58185299; 11428 - starting-at-height-58447799; 10938 - starting-at-height-58710299; 10468 - starting-at-height-58972799; 10020 - starting-at-height-59235299; 9590 - starting-at-height-59497799; 9178 - starting-at-height-59760299; 8786 - starting-at-height-60022799; 8408 - starting-at-height-60285299; 8048 - starting-at-height-60547799; 7702 - starting-at-height-60810299; 7372 - starting-at-height-61072799; 7056 - starting-at-height-61335299; 6754 - starting-at-height-61597799; 6464 - starting-at-height-61860299; 6186 - starting-at-height-62122799; 5922 - starting-at-height-62385299; 5668 - starting-at-height-62647799; 5424 - starting-at-height-62910299; 5192 - starting-at-height-63172799; 4970 - starting-at-height-63435299; 4756 - starting-at-height-63697799; 4552 - starting-at-height-63960299; 4356 - starting-at-height-64222799; 4170 - starting-at-height-64485299; 3992 - starting-at-height-64747799; 3820 - starting-at-height-65010299; 3656 - starting-at-height-65272799; 3500 - starting-at-height-65535299; 3350 - starting-at-height-65797799; 3206 - starting-at-height-66060299; 3068 - starting-at-height-66322799; 2936 - starting-at-height-66585299; 2810 - starting-at-height-66847799; 2690 - starting-at-height-67110299; 2574 - starting-at-height-67372799; 2464 - starting-at-height-67635299; 2358 - starting-at-height-67897799; 2258 - starting-at-height-68160299; 2160 - starting-at-height-68422799; 2068 - starting-at-height-68685299; 1980 - starting-at-height-68947799; 1894 - starting-at-height-69210299; 1812 - starting-at-height-69472799; 1736 - starting-at-height-69735299; 1660 - starting-at-height-69997799; 1590 - starting-at-height-70260299; 1522 - starting-at-height-70522799; 1456 - starting-at-height-70785299; 1394 - starting-at-height-71047799; 1334 - starting-at-height-71310299; 1276 - starting-at-height-71572799; 1222 - starting-at-height-71835299; 1170 - starting-at-height-72097799; 1120 - starting-at-height-72360299; 1072 - starting-at-height-72622799; 1026 - starting-at-height-72885299; 982 - starting-at-height-73147799; 938 - starting-at-height-73410299; 898 - starting-at-height-73672799; 860 - starting-at-height-73935299; 824 - starting-at-height-74197799; 788 - starting-at-height-74460299; 754 - starting-at-height-74722799; 722 - starting-at-height-74985299; 690 - starting-at-height-75247799; 662 - starting-at-height-75510299; 632 - starting-at-height-75772799; 606 - starting-at-height-76035299; 580 - starting-at-height-76297799; 554 - starting-at-height-76560299; 530 - starting-at-height-76822799; 508 - starting-at-height-77085299; 486 - starting-at-height-77347799; 466 - starting-at-height-77610299; 446 - starting-at-height-77872799; 426 - starting-at-height-78135299; 408 - starting-at-height-78397799; 390 - starting-at-height-78660299; 374 - starting-at-height-78922799; 358 - starting-at-height-79185299; 342 - starting-at-height-79447799; 328 - starting-at-height-79710299; 314 - starting-at-height-79972799; 300 - starting-at-height-80235299; 286 - starting-at-height-80497799; 274 - starting-at-height-80760299; 262 - starting-at-height-81022799; 252 - starting-at-height-81285299; 240 - starting-at-height-81547799; 230 - starting-at-height-81810299; 220 - starting-at-height-82072799; 210 - starting-at-height-82335299; 202 - starting-at-height-82597799; 194 - starting-at-height-82860299; 184 - starting-at-height-83122799; 176 - starting-at-height-83385299; 170 - starting-at-height-83647799; 162 - starting-at-height-83910299; 154 - starting-at-height-84172799; 148 - starting-at-height-84435299; 142 - starting-at-height-84697799; 136 - starting-at-height-84960299; 130 - starting-at-height-85222799; 124 - starting-at-height-85485299; 118 - starting-at-height-85747799; 114 - starting-at-height-86010299; 108 - starting-at-height-86272799; 104 - starting-at-height-86535299; 100 - starting-at-height-86797799; 96 - starting-at-height-87060299; 92 - starting-at-height-87322799; 88 - starting-at-height-87585299; 84 - starting-at-height-87847799; 80 - starting-at-height-88110299; 76 - starting-at-height-88372799; 72 - starting-at-height-88635299; 70 - starting-at-height-88897799; 66 - starting-at-height-89160299; 64 - starting-at-height-89422799; 62 - starting-at-height-89685299; 58 - starting-at-height-89947799; 56 - starting-at-height-90210299; 54 - starting-at-height-90472799; 52 - starting-at-height-90735299; 48 - starting-at-height-90997799; 46 - starting-at-height-91260299; 44 - starting-at-height-91522799; 42 - starting-at-height-91785299; 40 - starting-at-height-92047799; 40 - starting-at-height-92310299; 38 - starting-at-height-92572799; 36 - starting-at-height-92835299; 34 - starting-at-height-93097799; 32 - starting-at-height-93360299; 32 - starting-at-height-93622799; 30 - starting-at-height-93885299; 28 - starting-at-height-94147799; 28 - starting-at-height-94410299; 26 - starting-at-height-94672799; 24 - starting-at-height-94935299; 24 - starting-at-height-95197799; 22 - starting-at-height-95460299; 22 - starting-at-height-95722799; 20 - starting-at-height-95985299; 20 - starting-at-height-96247799; 18 - starting-at-height-96510299; 18 - starting-at-height-96772799; 18 - starting-at-height-97035299; 16 - starting-at-height-97297799; 16 - starting-at-height-97560299; 14 - starting-at-height-97822799; 14 - starting-at-height-98085299; 14 - starting-at-height-98347799; 12 - starting-at-height-98610299; 12 - starting-at-height-98872799; 12 - starting-at-height-99135299; 12 - starting-at-height-99397799; 10 - starting-at-height-99660299; 10 - starting-at-height-99922799; 10 - starting-at-height-100185299; 10 - starting-at-height-100447799; 8 - starting-at-height-100710299; 8 - starting-at-height-100972799; 8 - starting-at-height-101235299; 8 - starting-at-height-101497799; 8 - starting-at-height-101760299; 6 - starting-at-height-102022799; 6 - starting-at-height-102285299; 6 - starting-at-height-102547799; 6 - starting-at-height-102810299; 6 - starting-at-height-103072799; 6 - starting-at-height-103335299; 6 - starting-at-height-103597799; 4 - starting-at-height-103860299; 4 - starting-at-height-104122799; 4 - starting-at-height-104385299; 4 - starting-at-height-104647799; 4 - starting-at-height-104910299; 4 - starting-at-height-105172799; 4 - starting-at-height-105435299; 4 - starting-at-height-105697799; 4 - starting-at-height-105960299; 2 - starting-at-height-106222799; 2 - starting-at-height-106485299; 2 - starting-at-height-106747799; 2 - starting-at-height-107010299; 2 - starting-at-height-107272799; 2 - starting-at-height-107535299; 2 - starting-at-height-107797799; 2 - starting-at-height-108060299; 2 - starting-at-height-108322799; 2 - starting-at-height-108585299; 2 - starting-at-height-108847799; 2 - starting-at-height-109110299; 2 - starting-at-height-109372799; 2 - starting-at-height-109635299; 2 - starting-at-height-109897799; 2 - starting-at-height-110160299; 1 - starting-at-height-110422799; 0 - -config-logging-broker.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_broker%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-recovery.properties -================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_recovery%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-server.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_server%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-messaging.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **messaging**; - subscriberPort; 7902 - listenInterface; 0.0.0.0 - -config-network.properties -========================= -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **network**; ; ; - identifier; public; NetworkIdentifier; Network identifier. - nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. - nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. - generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; - epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. - **chain**; ; ; - enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. - enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. - currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. - harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. - blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. - blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. - importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. - importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. - maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. - maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. - defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. - maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. - maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. - initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. - maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. - totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. - minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. - votingSetGrouping; 1440; ; - maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. - minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. - maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. - harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. - harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. - harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. - maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - **plugin:catapult.plugins.accountlink**; - dummy; to trigger plugin load - **plugin:catapult.plugins.aggregate**; ; ; - maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. - maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. - enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. - enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. - maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - **plugin:catapult.plugins.lockhash**; ; ; - lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. - maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - **plugin:catapult.plugins.locksecret**; ; ; - maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. - minProofSize; 0; uint16_t; Minimum size of a proof in bytes. - maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - **plugin:catapult.plugins.metadata**; ; ; - maxValueSize; 1024; uint16_t; Maximum metadata value size. - **plugin:catapult.plugins.mosaic**; ; ; - maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. - maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. - maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. - mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. - mosaicRentalFee; 500000; Amount; Mosaic rental fee. - **plugin:catapult.plugins.multisig**; ; ; - maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. - maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. - maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - **plugin:catapult.plugins.namespace**; ; ; - maxNameSize; 64; uint8_t; Maximum namespace name size. - maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. - maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. - minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. - maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. - namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. - reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. - namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. - rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. - childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - **plugin:catapult.plugins.restrictionaccount**; ; ; - maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - **plugin:catapult.plugins.restrictionmosaic**; ; ; - maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - **plugin:catapult.plugins.transfer**; ; ; - maxMessageSize; 1024; uint16_t; Maximum transaction message size. - -config-node.properties -====================== -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **node**; ; ; - port; 7900; unsigned short; Server port. - maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. - enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. - enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. - enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. - enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. - fileDatabaseBatchSize; 100; ; - enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. - transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. - maxHashesPerSyncAttempt; 370; ; - maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. - maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. - shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. - shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. - shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. - shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. - minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. - maxTimeBehindPullTransactionsStart; 5m; ; - transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. - unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. - unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. - connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. - syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. - socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). - socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. - maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. - blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. - blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. - blockDisruptorMaxMemorySize; 300MB; ; - transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. - transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. - transactionDisruptorMaxMemorySize; 20MB; ; - enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. - enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. - maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. - minPartnerNodeVersion; 1.0.0.0; ; - maxPartnerNodeVersion; 1.0.255.255; ; - trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. - localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. - listenInterface; 0.0.0.0; ; - **cache_database**; - enableStatistics; false - maxOpenFiles; 0 - maxBackgroundThreads; 0 - maxSubcompactionThreads; 0 - blockCacheSize; 0MB - memtableMemoryBudget; 0MB - maxWriteBatchSize; 5MB - **localnode**; ; ; - host; ; string; Node host (leave empty to auto-detect IP). - friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). - version; 1.0.1.0; uint32_t; Node version. - roles; Peer,Api; ionet::NodeRoles; Node roles. - **outgoing_connections**; ; ; - maxConnections; 10; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - **incoming_connections**; ; ; - maxConnections; 512; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - **banning**; ; ; - defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. - maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. - keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. - maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. - numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). - readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. - maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. - minTransactionFailuresCountForBan; 8; ; - minTransactionFailuresPercentForBan; 10; ; - -config-pt.properties -==================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **partialtransactions**; - cacheMaxResponseSize; 5MB - cacheMaxSize; 20MB - -config-task.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **logging task**; - startDelay; 1m - repeatDelay; 10m - **connect peers task for service Finalization**; - startDelay; 2s - repeatDelay; 1m - **finalization task**; - startDelay; 2m - repeatDelay; 15s - **pull finalization messages task**; - startDelay; 3s - repeatDelay; 1s - **pull finalization proof task**; - startDelay; 10s - repeatDelay; 50s - **harvesting task**; - startDelay; 30s - repeatDelay; 1s - **network chain height detection**; - startDelay; 1s - repeatDelay; 15s - **node discovery peers task**; - startDelay; 1m - minDelay; 1m - maxDelay; 10m - numPhaseOneRounds; 10 - numTransitionRounds; 20 - **node discovery ping task**; - startDelay; 2m - repeatDelay; 5m - **age peers task for service Readers**; - startDelay; 1m - repeatDelay; 1m - **batch partial transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Pt**; - startDelay; 3s - repeatDelay; 1m - **pull partial transactions task**; - startDelay; 10s - repeatDelay; 3s - **batch transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Sync**; - startDelay; 1s - repeatDelay; 1m - **pull unconfirmed transactions task**; - startDelay; 4s - repeatDelay; 3s - **synchronizer task**; - startDelay; 3s - repeatDelay; 3s - **time synchronization task**; - startDelay; 1m - minDelay; 3m - maxDelay; 180m - numPhaseOneRounds; 5 - numTransitionRounds; 10 - **static node refresh task**; - startDelay; 5ms - minDelay; 15s - maxDelay; 24h - numPhaseOneRounds; 20 - numTransitionRounds; 20 - -config-timesync.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **timesynchronization**; - maxNodes; 20 - minImportance; 10'000'000'000 - -config-user.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **account**; - enableDelegatedHarvestersAutoDetection; true - **storage**; - seedDirectory; ./seed - certificateDirectory; ./cert - dataDirectory; ./data - pluginsDirectory; /usr/catapult/lib - votingKeysDirectory; ./votingkeys diff --git a/test/reports/mainnet-dual/rest-gateway-rest.json b/test/reports/mainnet-dual/rest-gateway-rest.json deleted file mode 100644 index 060614d72..000000000 --- a/test/reports/mainnet-dual/rest-gateway-rest.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "network": { - "name": "public", - "description": "catapult public main network" - }, - "port": 3000, - "crossDomain": { - "allowedHosts": [ - "*" - ], - "allowedMethods": [ - "GET", - "POST", - "PUT", - "OPTIONS" - ] - }, - "extensions": [ - "accountLink", - "aggregate", - "lockHash", - "lockSecret", - "mosaic", - "metadata", - "multisig", - "namespace", - "receipts", - "restrictions", - "transfer", - "cmc" - ], - "db": { - "url": "mongodb://db:27017/", - "name": "catapult", - "pageSizeMin": 10, - "pageSizeMax": 100, - "maxConnectionAttempts": 15, - "baseRetryDelay": 750, - "connectionPoolSize": 10 - }, - "apiNode": { - "host": "node", - "port": 7900, - "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", - "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", - "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", - "timeout": 1000, - "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", - "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" - }, - "websocket": { - "mq": { - "host": "broker", - "port": 7902, - "monitorInterval": 500, - "connectTimeout": 10000, - "monitorLoggingThrottle": 60000, - "maxSubscriptions": 300 - }, - "allowOptionalAddress": true - }, - "throttling": { - "burst": 80, - "rate": 60 - }, - "logging": { - "console": { - "formats": [ - "colorize", - "simple" - ], - "level": "verbose", - "handleExceptions": true - }, - "file": { - "formats": [ - "prettyPrint" - ], - "level": "verbose", - "handleExceptions": true, - "filename": "/symbol-workdir/logs/catapult-rest.log", - "maxsize": 20971520, - "maxFiles": 100 - } - }, - "numBlocksTransactionFeeStats": 300, - "deployment": { - "deploymentTool": "symbol-bootstrap", - "deploymentToolVersion": "abc", - "lastUpdatedDate": "2021-05-23" - } -} diff --git a/test/reports/mainnet-peer/node-config.csv b/test/reports/mainnet-peer/node-config.csv deleted file mode 100644 index 2eab1674a..000000000 --- a/test/reports/mainnet-peer/node-config.csv +++ /dev/null @@ -1,865 +0,0 @@ -symbol-bootstrap-version; CURRENT_VERSION - -config-database.properties -database -databaseUri; mongodb://:27017 -databaseName; catapult -maxWriterThreads; 8 -maxDropBatchSize; 10 -writeTimeout; 10m - -plugins -catapult.mongo.plugins.accountlink; true -catapult.mongo.plugins.aggregate; true -catapult.mongo.plugins.lockhash; true -catapult.mongo.plugins.locksecret; true -catapult.mongo.plugins.metadata; true -catapult.mongo.plugins.mosaic; true -catapult.mongo.plugins.multisig; true -catapult.mongo.plugins.namespace; true -catapult.mongo.plugins.restrictionaccount; true -catapult.mongo.plugins.restrictionmosaic; true -catapult.mongo.plugins.transfer; true - - -config-extensions-broker.properties -extensions -extension.addressextraction; true -extension.mongo; true -extension.zeromq; true -extension.hashcache; true - - -config-extensions-recovery.properties -extensions -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.filespooling; true -extension.hashcache; true - - -config-extensions-server.properties -extensions -extension.filespooling; false -extension.partialtransaction; false -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.harvesting; true -extension.syncsource; true -extension.diagnostics; true -extension.finalization; true -extension.hashcache; true -extension.networkheight; false -extension.nodediscovery; true -extension.packetserver; true -extension.pluginhandlers; true -extension.sync; true -extension.timesync; true -extension.transactionsink; true -extension.unbondedpruning; true - - -config-finalization.properties -finalization -enableVoting; false -enableRevoteOnBoot; false -size; 10'000 -threshold; 7'000 -stepDuration; 5m -shortLivedCacheMessageDuration; 10m -messageSynchronizationMaxResponseSize; 20MB -maxHashesPerPoint; 256 -prevoteBlocksMultiple; 4 -unfinalizedBlocksDuration; 10m - - -config-harvesting.properties -harvesting -harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. -harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. -enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. -maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. -delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. -beneficiaryAddress; NDQ32MTJICEPJDU45KVN7BAM4A4GI7OARNBUUFY; Address; Address of the account receiving part of the harvested fee. - - -config-inflation.properties -inflation -starting-at-height-2; 0 -starting-at-height-5760; 191997042 -starting-at-height-172799; 183764522 -starting-at-height-435299; 175884998 -starting-at-height-697799; 168343336 -starting-at-height-960299; 161125048 -starting-at-height-1222799; 154216270 -starting-at-height-1485299; 147603728 -starting-at-height-1747799; 141274720 -starting-at-height-2010299; 135217090 -starting-at-height-2272799; 129419202 -starting-at-height-2535299; 123869918 -starting-at-height-2797799; 118558578 -starting-at-height-3060299; 113474978 -starting-at-height-3322799; 108609356 -starting-at-height-3585299; 103952364 -starting-at-height-3847799; 99495056 -starting-at-height-4110299; 95228870 -starting-at-height-4372799; 91145612 -starting-at-height-4635299; 87237436 -starting-at-height-4897799; 83496838 -starting-at-height-5160299; 79916630 -starting-at-height-5422799; 76489934 -starting-at-height-5685299; 73210170 -starting-at-height-5947799; 70071038 -starting-at-height-6210299; 67066506 -starting-at-height-6472799; 64190804 -starting-at-height-6735299; 61438406 -starting-at-height-6997799; 58804028 -starting-at-height-7260299; 56282608 -starting-at-height-7522799; 53869300 -starting-at-height-7785299; 51559472 -starting-at-height-8047799; 49348686 -starting-at-height-8310299; 47232696 -starting-at-height-8572799; 45207434 -starting-at-height-8835299; 43269014 -starting-at-height-9097799; 41413708 -starting-at-height-9360299; 39637956 -starting-at-height-9622799; 37938346 -starting-at-height-9885299; 36311610 -starting-at-height-10147799; 34754628 -starting-at-height-10410299; 33264406 -starting-at-height-10672799; 31838082 -starting-at-height-10935299; 30472918 -starting-at-height-11197799; 29166288 -starting-at-height-11460299; 27915686 -starting-at-height-11722799; 26718706 -starting-at-height-11985299; 25573052 -starting-at-height-12247799; 24476520 -starting-at-height-12510299; 23427008 -starting-at-height-12772799; 22422496 -starting-at-height-13035299; 21461056 -starting-at-height-13297799; 20540840 -starting-at-height-13560299; 19660082 -starting-at-height-13822799; 18817090 -starting-at-height-14085299; 18010244 -starting-at-height-14347799; 17237994 -starting-at-height-14610299; 16498858 -starting-at-height-14872799; 15791412 -starting-at-height-15135299; 15114302 -starting-at-height-15397799; 14466226 -starting-at-height-15660299; 13845938 -starting-at-height-15922799; 13252246 -starting-at-height-16185299; 12684012 -starting-at-height-16447799; 12140142 -starting-at-height-16710299; 11619592 -starting-at-height-16972799; 11121364 -starting-at-height-17235299; 10644498 -starting-at-height-17497799; 10188078 -starting-at-height-17760299; 9751230 -starting-at-height-18022799; 9333114 -starting-at-height-18285299; 8932924 -starting-at-height-18547799; 8549896 -starting-at-height-18810299; 8183290 -starting-at-height-19072799; 7832404 -starting-at-height-19335299; 7496562 -starting-at-height-19597799; 7175122 -starting-at-height-19860299; 6867464 -starting-at-height-20122799; 6573000 -starting-at-height-20385299; 6291160 -starting-at-height-20647799; 6021404 -starting-at-height-20910299; 5763216 -starting-at-height-21172799; 5516100 -starting-at-height-21435299; 5279578 -starting-at-height-21697799; 5053198 -starting-at-height-21960299; 4836526 -starting-at-height-22222799; 4629144 -starting-at-height-22485299; 4430652 -starting-at-height-22747799; 4240674 -starting-at-height-23010299; 4058840 -starting-at-height-23272799; 3884804 -starting-at-height-23535299; 3718230 -starting-at-height-23797799; 3558798 -starting-at-height-24060299; 3406202 -starting-at-height-24322799; 3260150 -starting-at-height-24585299; 3120360 -starting-at-height-24847799; 2986564 -starting-at-height-25110299; 2858506 -starting-at-height-25372799; 2735938 -starting-at-height-25635299; 2618624 -starting-at-height-25897799; 2506342 -starting-at-height-26160299; 2398874 -starting-at-height-26422799; 2296014 -starting-at-height-26685299; 2197564 -starting-at-height-26947799; 2103336 -starting-at-height-27210299; 2013150 -starting-at-height-27472799; 1926828 -starting-at-height-27735299; 1844210 -starting-at-height-27997799; 1765132 -starting-at-height-28260299; 1689446 -starting-at-height-28522799; 1617006 -starting-at-height-28785299; 1547672 -starting-at-height-29047799; 1481310 -starting-at-height-29310299; 1417794 -starting-at-height-29572799; 1357000 -starting-at-height-29835299; 1298814 -starting-at-height-30097799; 1243124 -starting-at-height-30360299; 1189820 -starting-at-height-30622799; 1138802 -starting-at-height-30885299; 1089972 -starting-at-height-31147799; 1043236 -starting-at-height-31410299; 998504 -starting-at-height-31672799; 955690 -starting-at-height-31935299; 914712 -starting-at-height-32197799; 875490 -starting-at-height-32460299; 837950 -starting-at-height-32722799; 802020 -starting-at-height-32985299; 767630 -starting-at-height-33247799; 734716 -starting-at-height-33510299; 703212 -starting-at-height-33772799; 673060 -starting-at-height-34035299; 644200 -starting-at-height-34297799; 616578 -starting-at-height-34560299; 590140 -starting-at-height-34822799; 564836 -starting-at-height-35085299; 540616 -starting-at-height-35347799; 517436 -starting-at-height-35610299; 495248 -starting-at-height-35872799; 474014 -starting-at-height-36135299; 453688 -starting-at-height-36397799; 434234 -starting-at-height-36660299; 415616 -starting-at-height-36922799; 397794 -starting-at-height-37185299; 380738 -starting-at-height-37447799; 364412 -starting-at-height-37710299; 348786 -starting-at-height-37972799; 333832 -starting-at-height-38235299; 319518 -starting-at-height-38497799; 305816 -starting-at-height-38760299; 292704 -starting-at-height-39022799; 280154 -starting-at-height-39285299; 268140 -starting-at-height-39547799; 256644 -starting-at-height-39810299; 245638 -starting-at-height-40072799; 235106 -starting-at-height-40335299; 225026 -starting-at-height-40597799; 215376 -starting-at-height-40860299; 206142 -starting-at-height-41122799; 197302 -starting-at-height-41385299; 188842 -starting-at-height-41647799; 180744 -starting-at-height-41910299; 172994 -starting-at-height-42172799; 165578 -starting-at-height-42435299; 158478 -starting-at-height-42697799; 151682 -starting-at-height-42960299; 145178 -starting-at-height-43222799; 138954 -starting-at-height-43485299; 132994 -starting-at-height-43747799; 127292 -starting-at-height-44010299; 121834 -starting-at-height-44272799; 116610 -starting-at-height-44535299; 111610 -starting-at-height-44797799; 106824 -starting-at-height-45060299; 102244 -starting-at-height-45322799; 97860 -starting-at-height-45585299; 93664 -starting-at-height-45847799; 89648 -starting-at-height-46110299; 85804 -starting-at-height-46372799; 82124 -starting-at-height-46635299; 78602 -starting-at-height-46897799; 75232 -starting-at-height-47160299; 72006 -starting-at-height-47422799; 68920 -starting-at-height-47685299; 65964 -starting-at-height-47947799; 63136 -starting-at-height-48210299; 60428 -starting-at-height-48472799; 57838 -starting-at-height-48735299; 55358 -starting-at-height-48997799; 52984 -starting-at-height-49260299; 50712 -starting-at-height-49522799; 48538 -starting-at-height-49785299; 46456 -starting-at-height-50047799; 44464 -starting-at-height-50310299; 42558 -starting-at-height-50572799; 40732 -starting-at-height-50835299; 38986 -starting-at-height-51097799; 37314 -starting-at-height-51360299; 35714 -starting-at-height-51622799; 34182 -starting-at-height-51885299; 32716 -starting-at-height-52147799; 31314 -starting-at-height-52410299; 29972 -starting-at-height-52672799; 28686 -starting-at-height-52935299; 27456 -starting-at-height-53197799; 26278 -starting-at-height-53460299; 25152 -starting-at-height-53722799; 24074 -starting-at-height-53985299; 23042 -starting-at-height-54247799; 22054 -starting-at-height-54510299; 21108 -starting-at-height-54772799; 20202 -starting-at-height-55035299; 19336 -starting-at-height-55297799; 18506 -starting-at-height-55560299; 17714 -starting-at-height-55822799; 16954 -starting-at-height-56085299; 16226 -starting-at-height-56347799; 15532 -starting-at-height-56610299; 14866 -starting-at-height-56872799; 14228 -starting-at-height-57135299; 13618 -starting-at-height-57397799; 13034 -starting-at-height-57660299; 12474 -starting-at-height-57922799; 11940 -starting-at-height-58185299; 11428 -starting-at-height-58447799; 10938 -starting-at-height-58710299; 10468 -starting-at-height-58972799; 10020 -starting-at-height-59235299; 9590 -starting-at-height-59497799; 9178 -starting-at-height-59760299; 8786 -starting-at-height-60022799; 8408 -starting-at-height-60285299; 8048 -starting-at-height-60547799; 7702 -starting-at-height-60810299; 7372 -starting-at-height-61072799; 7056 -starting-at-height-61335299; 6754 -starting-at-height-61597799; 6464 -starting-at-height-61860299; 6186 -starting-at-height-62122799; 5922 -starting-at-height-62385299; 5668 -starting-at-height-62647799; 5424 -starting-at-height-62910299; 5192 -starting-at-height-63172799; 4970 -starting-at-height-63435299; 4756 -starting-at-height-63697799; 4552 -starting-at-height-63960299; 4356 -starting-at-height-64222799; 4170 -starting-at-height-64485299; 3992 -starting-at-height-64747799; 3820 -starting-at-height-65010299; 3656 -starting-at-height-65272799; 3500 -starting-at-height-65535299; 3350 -starting-at-height-65797799; 3206 -starting-at-height-66060299; 3068 -starting-at-height-66322799; 2936 -starting-at-height-66585299; 2810 -starting-at-height-66847799; 2690 -starting-at-height-67110299; 2574 -starting-at-height-67372799; 2464 -starting-at-height-67635299; 2358 -starting-at-height-67897799; 2258 -starting-at-height-68160299; 2160 -starting-at-height-68422799; 2068 -starting-at-height-68685299; 1980 -starting-at-height-68947799; 1894 -starting-at-height-69210299; 1812 -starting-at-height-69472799; 1736 -starting-at-height-69735299; 1660 -starting-at-height-69997799; 1590 -starting-at-height-70260299; 1522 -starting-at-height-70522799; 1456 -starting-at-height-70785299; 1394 -starting-at-height-71047799; 1334 -starting-at-height-71310299; 1276 -starting-at-height-71572799; 1222 -starting-at-height-71835299; 1170 -starting-at-height-72097799; 1120 -starting-at-height-72360299; 1072 -starting-at-height-72622799; 1026 -starting-at-height-72885299; 982 -starting-at-height-73147799; 938 -starting-at-height-73410299; 898 -starting-at-height-73672799; 860 -starting-at-height-73935299; 824 -starting-at-height-74197799; 788 -starting-at-height-74460299; 754 -starting-at-height-74722799; 722 -starting-at-height-74985299; 690 -starting-at-height-75247799; 662 -starting-at-height-75510299; 632 -starting-at-height-75772799; 606 -starting-at-height-76035299; 580 -starting-at-height-76297799; 554 -starting-at-height-76560299; 530 -starting-at-height-76822799; 508 -starting-at-height-77085299; 486 -starting-at-height-77347799; 466 -starting-at-height-77610299; 446 -starting-at-height-77872799; 426 -starting-at-height-78135299; 408 -starting-at-height-78397799; 390 -starting-at-height-78660299; 374 -starting-at-height-78922799; 358 -starting-at-height-79185299; 342 -starting-at-height-79447799; 328 -starting-at-height-79710299; 314 -starting-at-height-79972799; 300 -starting-at-height-80235299; 286 -starting-at-height-80497799; 274 -starting-at-height-80760299; 262 -starting-at-height-81022799; 252 -starting-at-height-81285299; 240 -starting-at-height-81547799; 230 -starting-at-height-81810299; 220 -starting-at-height-82072799; 210 -starting-at-height-82335299; 202 -starting-at-height-82597799; 194 -starting-at-height-82860299; 184 -starting-at-height-83122799; 176 -starting-at-height-83385299; 170 -starting-at-height-83647799; 162 -starting-at-height-83910299; 154 -starting-at-height-84172799; 148 -starting-at-height-84435299; 142 -starting-at-height-84697799; 136 -starting-at-height-84960299; 130 -starting-at-height-85222799; 124 -starting-at-height-85485299; 118 -starting-at-height-85747799; 114 -starting-at-height-86010299; 108 -starting-at-height-86272799; 104 -starting-at-height-86535299; 100 -starting-at-height-86797799; 96 -starting-at-height-87060299; 92 -starting-at-height-87322799; 88 -starting-at-height-87585299; 84 -starting-at-height-87847799; 80 -starting-at-height-88110299; 76 -starting-at-height-88372799; 72 -starting-at-height-88635299; 70 -starting-at-height-88897799; 66 -starting-at-height-89160299; 64 -starting-at-height-89422799; 62 -starting-at-height-89685299; 58 -starting-at-height-89947799; 56 -starting-at-height-90210299; 54 -starting-at-height-90472799; 52 -starting-at-height-90735299; 48 -starting-at-height-90997799; 46 -starting-at-height-91260299; 44 -starting-at-height-91522799; 42 -starting-at-height-91785299; 40 -starting-at-height-92047799; 40 -starting-at-height-92310299; 38 -starting-at-height-92572799; 36 -starting-at-height-92835299; 34 -starting-at-height-93097799; 32 -starting-at-height-93360299; 32 -starting-at-height-93622799; 30 -starting-at-height-93885299; 28 -starting-at-height-94147799; 28 -starting-at-height-94410299; 26 -starting-at-height-94672799; 24 -starting-at-height-94935299; 24 -starting-at-height-95197799; 22 -starting-at-height-95460299; 22 -starting-at-height-95722799; 20 -starting-at-height-95985299; 20 -starting-at-height-96247799; 18 -starting-at-height-96510299; 18 -starting-at-height-96772799; 18 -starting-at-height-97035299; 16 -starting-at-height-97297799; 16 -starting-at-height-97560299; 14 -starting-at-height-97822799; 14 -starting-at-height-98085299; 14 -starting-at-height-98347799; 12 -starting-at-height-98610299; 12 -starting-at-height-98872799; 12 -starting-at-height-99135299; 12 -starting-at-height-99397799; 10 -starting-at-height-99660299; 10 -starting-at-height-99922799; 10 -starting-at-height-100185299; 10 -starting-at-height-100447799; 8 -starting-at-height-100710299; 8 -starting-at-height-100972799; 8 -starting-at-height-101235299; 8 -starting-at-height-101497799; 8 -starting-at-height-101760299; 6 -starting-at-height-102022799; 6 -starting-at-height-102285299; 6 -starting-at-height-102547799; 6 -starting-at-height-102810299; 6 -starting-at-height-103072799; 6 -starting-at-height-103335299; 6 -starting-at-height-103597799; 4 -starting-at-height-103860299; 4 -starting-at-height-104122799; 4 -starting-at-height-104385299; 4 -starting-at-height-104647799; 4 -starting-at-height-104910299; 4 -starting-at-height-105172799; 4 -starting-at-height-105435299; 4 -starting-at-height-105697799; 4 -starting-at-height-105960299; 2 -starting-at-height-106222799; 2 -starting-at-height-106485299; 2 -starting-at-height-106747799; 2 -starting-at-height-107010299; 2 -starting-at-height-107272799; 2 -starting-at-height-107535299; 2 -starting-at-height-107797799; 2 -starting-at-height-108060299; 2 -starting-at-height-108322799; 2 -starting-at-height-108585299; 2 -starting-at-height-108847799; 2 -starting-at-height-109110299; 2 -starting-at-height-109372799; 2 -starting-at-height-109635299; 2 -starting-at-height-109897799; 2 -starting-at-height-110160299; 1 -starting-at-height-110422799; 0 - - -config-logging-broker.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_broker%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-recovery.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_recovery%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-server.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_server%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-messaging.properties -messaging -subscriberPort; 7902 -listenInterface; 0.0.0.0 - - -config-network.properties -network -identifier; public; NetworkIdentifier; Network identifier. -nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. -nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. -generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; -epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. - -chain -enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. -enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. -currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. -harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. -blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. -blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. -importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. -importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. -maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. -maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. -defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. -maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. -maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. -initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. -maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. -totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. -minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. -votingSetGrouping; 1440; ; -maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. -minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. -maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. -harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. -harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. -harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. -maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - -plugin:catapult.plugins.accountlink -dummy; to trigger plugin load - -plugin:catapult.plugins.aggregate -maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. -maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. -enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. -enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. -maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - -plugin:catapult.plugins.lockhash -lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. -maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - -plugin:catapult.plugins.locksecret -maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. -minProofSize; 0; uint16_t; Minimum size of a proof in bytes. -maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - -plugin:catapult.plugins.metadata -maxValueSize; 1024; uint16_t; Maximum metadata value size. - -plugin:catapult.plugins.mosaic -maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. -maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. -maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. -mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. -mosaicRentalFee; 500000; Amount; Mosaic rental fee. - -plugin:catapult.plugins.multisig -maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. -maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. -maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - -plugin:catapult.plugins.namespace -maxNameSize; 64; uint8_t; Maximum namespace name size. -maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. -maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. -minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. -maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. -namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. -reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. -namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. -rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. -childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - -plugin:catapult.plugins.restrictionaccount -maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - -plugin:catapult.plugins.restrictionmosaic -maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - -plugin:catapult.plugins.transfer -maxMessageSize; 1024; uint16_t; Maximum transaction message size. - - -config-node.properties -node -port; 7900; unsigned short; Server port. -maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. -enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. -enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. -enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. -enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. -fileDatabaseBatchSize; 100; ; -enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. -transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. -maxHashesPerSyncAttempt; 370; ; -maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. -maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. -shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. -shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. -shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. -shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. -minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. -maxTimeBehindPullTransactionsStart; 5m; ; -transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. -unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. -unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. -connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. -syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. -socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). -socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. -maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. -blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. -blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. -blockDisruptorMaxMemorySize; 300MB; ; -transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. -transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. -transactionDisruptorMaxMemorySize; 20MB; ; -enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. -enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. -maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. -minPartnerNodeVersion; 1.0.0.0; ; -maxPartnerNodeVersion; 1.0.255.255; ; -trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. -localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. -listenInterface; 0.0.0.0; ; - -cache_database -enableStatistics; false -maxOpenFiles; 0 -maxBackgroundThreads; 0 -maxSubcompactionThreads; 0 -blockCacheSize; 0MB -memtableMemoryBudget; 0MB -maxWriteBatchSize; 5MB - -localnode -host; ; string; Node host (leave empty to auto-detect IP). -friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). -version; 1.0.1.0; uint32_t; Node version. -roles; Peer; ionet::NodeRoles; Node roles. - -outgoing_connections -maxConnections; 10; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - -incoming_connections -maxConnections; 512; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. -backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - -banning -defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. -maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. -keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. -maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. -numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). -readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. -maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. -minTransactionFailuresCountForBan; 8; ; -minTransactionFailuresPercentForBan; 10; ; - - -config-pt.properties -partialtransactions -cacheMaxResponseSize; 5MB -cacheMaxSize; 20MB - - -config-task.properties -logging task -startDelay; 1m -repeatDelay; 10m - -connect peers task for service Finalization -startDelay; 2s -repeatDelay; 1m - -finalization task -startDelay; 2m -repeatDelay; 15s - -pull finalization messages task -startDelay; 3s -repeatDelay; 1s - -pull finalization proof task -startDelay; 10s -repeatDelay; 50s - -harvesting task -startDelay; 30s -repeatDelay; 1s - -network chain height detection -startDelay; 1s -repeatDelay; 15s - -node discovery peers task -startDelay; 1m -minDelay; 1m -maxDelay; 10m -numPhaseOneRounds; 10 -numTransitionRounds; 20 - -node discovery ping task -startDelay; 2m -repeatDelay; 5m - -age peers task for service Readers -startDelay; 1m -repeatDelay; 1m - -batch partial transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Pt -startDelay; 3s -repeatDelay; 1m - -pull partial transactions task -startDelay; 10s -repeatDelay; 3s - -batch transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Sync -startDelay; 1s -repeatDelay; 1m - -pull unconfirmed transactions task -startDelay; 4s -repeatDelay; 3s - -synchronizer task -startDelay; 3s -repeatDelay; 3s - -time synchronization task -startDelay; 1m -minDelay; 3m -maxDelay; 180m -numPhaseOneRounds; 5 -numTransitionRounds; 10 - -static node refresh task -startDelay; 5ms -minDelay; 15s -maxDelay; 24h -numPhaseOneRounds; 20 -numTransitionRounds; 20 - - -config-timesync.properties -timesynchronization -maxNodes; 20 -minImportance; 10'000'000'000 - - -config-user.properties -account -enableDelegatedHarvestersAutoDetection; true - -storage -seedDirectory; ./seed -certificateDirectory; ./cert -dataDirectory; ./data -pluginsDirectory; /usr/catapult/lib -votingKeysDirectory; ./votingkeys diff --git a/test/reports/mainnet-peer/node-config.rst b/test/reports/mainnet-peer/node-config.rst deleted file mode 100644 index 74be02007..000000000 --- a/test/reports/mainnet-peer/node-config.rst +++ /dev/null @@ -1,888 +0,0 @@ -Symbol Bootstrap Version: CURRENT_VERSION - -config-database.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **database**; - databaseUri; mongodb://:27017 - databaseName; catapult - maxWriterThreads; 8 - maxDropBatchSize; 10 - writeTimeout; 10m - **plugins**; - catapult.mongo.plugins.accountlink; true - catapult.mongo.plugins.aggregate; true - catapult.mongo.plugins.lockhash; true - catapult.mongo.plugins.locksecret; true - catapult.mongo.plugins.metadata; true - catapult.mongo.plugins.mosaic; true - catapult.mongo.plugins.multisig; true - catapult.mongo.plugins.namespace; true - catapult.mongo.plugins.restrictionaccount; true - catapult.mongo.plugins.restrictionmosaic; true - catapult.mongo.plugins.transfer; true - -config-extensions-broker.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; true - extension.mongo; true - extension.zeromq; true - extension.hashcache; true - -config-extensions-recovery.properties -===================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.filespooling; true - extension.hashcache; true - -config-extensions-server.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.filespooling; false - extension.partialtransaction; false - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.harvesting; true - extension.syncsource; true - extension.diagnostics; true - extension.finalization; true - extension.hashcache; true - extension.networkheight; false - extension.nodediscovery; true - extension.packetserver; true - extension.pluginhandlers; true - extension.sync; true - extension.timesync; true - extension.transactionsink; true - extension.unbondedpruning; true - -config-finalization.properties -============================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **finalization**; - enableVoting; false - enableRevoteOnBoot; false - size; 10'000 - threshold; 7'000 - stepDuration; 5m - shortLivedCacheMessageDuration; 10m - messageSynchronizationMaxResponseSize; 20MB - maxHashesPerPoint; 256 - prevoteBlocksMultiple; 4 - unfinalizedBlocksDuration; 10m - -config-harvesting.properties -============================ -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **harvesting**; ; ; - harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. - harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. - enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. - maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. - delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. - beneficiaryAddress; NDQ32MTJICEPJDU45KVN7BAM4A4GI7OARNBUUFY; Address; Address of the account receiving part of the harvested fee. - -config-inflation.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **inflation**; - starting-at-height-2; 0 - starting-at-height-5760; 191997042 - starting-at-height-172799; 183764522 - starting-at-height-435299; 175884998 - starting-at-height-697799; 168343336 - starting-at-height-960299; 161125048 - starting-at-height-1222799; 154216270 - starting-at-height-1485299; 147603728 - starting-at-height-1747799; 141274720 - starting-at-height-2010299; 135217090 - starting-at-height-2272799; 129419202 - starting-at-height-2535299; 123869918 - starting-at-height-2797799; 118558578 - starting-at-height-3060299; 113474978 - starting-at-height-3322799; 108609356 - starting-at-height-3585299; 103952364 - starting-at-height-3847799; 99495056 - starting-at-height-4110299; 95228870 - starting-at-height-4372799; 91145612 - starting-at-height-4635299; 87237436 - starting-at-height-4897799; 83496838 - starting-at-height-5160299; 79916630 - starting-at-height-5422799; 76489934 - starting-at-height-5685299; 73210170 - starting-at-height-5947799; 70071038 - starting-at-height-6210299; 67066506 - starting-at-height-6472799; 64190804 - starting-at-height-6735299; 61438406 - starting-at-height-6997799; 58804028 - starting-at-height-7260299; 56282608 - starting-at-height-7522799; 53869300 - starting-at-height-7785299; 51559472 - starting-at-height-8047799; 49348686 - starting-at-height-8310299; 47232696 - starting-at-height-8572799; 45207434 - starting-at-height-8835299; 43269014 - starting-at-height-9097799; 41413708 - starting-at-height-9360299; 39637956 - starting-at-height-9622799; 37938346 - starting-at-height-9885299; 36311610 - starting-at-height-10147799; 34754628 - starting-at-height-10410299; 33264406 - starting-at-height-10672799; 31838082 - starting-at-height-10935299; 30472918 - starting-at-height-11197799; 29166288 - starting-at-height-11460299; 27915686 - starting-at-height-11722799; 26718706 - starting-at-height-11985299; 25573052 - starting-at-height-12247799; 24476520 - starting-at-height-12510299; 23427008 - starting-at-height-12772799; 22422496 - starting-at-height-13035299; 21461056 - starting-at-height-13297799; 20540840 - starting-at-height-13560299; 19660082 - starting-at-height-13822799; 18817090 - starting-at-height-14085299; 18010244 - starting-at-height-14347799; 17237994 - starting-at-height-14610299; 16498858 - starting-at-height-14872799; 15791412 - starting-at-height-15135299; 15114302 - starting-at-height-15397799; 14466226 - starting-at-height-15660299; 13845938 - starting-at-height-15922799; 13252246 - starting-at-height-16185299; 12684012 - starting-at-height-16447799; 12140142 - starting-at-height-16710299; 11619592 - starting-at-height-16972799; 11121364 - starting-at-height-17235299; 10644498 - starting-at-height-17497799; 10188078 - starting-at-height-17760299; 9751230 - starting-at-height-18022799; 9333114 - starting-at-height-18285299; 8932924 - starting-at-height-18547799; 8549896 - starting-at-height-18810299; 8183290 - starting-at-height-19072799; 7832404 - starting-at-height-19335299; 7496562 - starting-at-height-19597799; 7175122 - starting-at-height-19860299; 6867464 - starting-at-height-20122799; 6573000 - starting-at-height-20385299; 6291160 - starting-at-height-20647799; 6021404 - starting-at-height-20910299; 5763216 - starting-at-height-21172799; 5516100 - starting-at-height-21435299; 5279578 - starting-at-height-21697799; 5053198 - starting-at-height-21960299; 4836526 - starting-at-height-22222799; 4629144 - starting-at-height-22485299; 4430652 - starting-at-height-22747799; 4240674 - starting-at-height-23010299; 4058840 - starting-at-height-23272799; 3884804 - starting-at-height-23535299; 3718230 - starting-at-height-23797799; 3558798 - starting-at-height-24060299; 3406202 - starting-at-height-24322799; 3260150 - starting-at-height-24585299; 3120360 - starting-at-height-24847799; 2986564 - starting-at-height-25110299; 2858506 - starting-at-height-25372799; 2735938 - starting-at-height-25635299; 2618624 - starting-at-height-25897799; 2506342 - starting-at-height-26160299; 2398874 - starting-at-height-26422799; 2296014 - starting-at-height-26685299; 2197564 - starting-at-height-26947799; 2103336 - starting-at-height-27210299; 2013150 - starting-at-height-27472799; 1926828 - starting-at-height-27735299; 1844210 - starting-at-height-27997799; 1765132 - starting-at-height-28260299; 1689446 - starting-at-height-28522799; 1617006 - starting-at-height-28785299; 1547672 - starting-at-height-29047799; 1481310 - starting-at-height-29310299; 1417794 - starting-at-height-29572799; 1357000 - starting-at-height-29835299; 1298814 - starting-at-height-30097799; 1243124 - starting-at-height-30360299; 1189820 - starting-at-height-30622799; 1138802 - starting-at-height-30885299; 1089972 - starting-at-height-31147799; 1043236 - starting-at-height-31410299; 998504 - starting-at-height-31672799; 955690 - starting-at-height-31935299; 914712 - starting-at-height-32197799; 875490 - starting-at-height-32460299; 837950 - starting-at-height-32722799; 802020 - starting-at-height-32985299; 767630 - starting-at-height-33247799; 734716 - starting-at-height-33510299; 703212 - starting-at-height-33772799; 673060 - starting-at-height-34035299; 644200 - starting-at-height-34297799; 616578 - starting-at-height-34560299; 590140 - starting-at-height-34822799; 564836 - starting-at-height-35085299; 540616 - starting-at-height-35347799; 517436 - starting-at-height-35610299; 495248 - starting-at-height-35872799; 474014 - starting-at-height-36135299; 453688 - starting-at-height-36397799; 434234 - starting-at-height-36660299; 415616 - starting-at-height-36922799; 397794 - starting-at-height-37185299; 380738 - starting-at-height-37447799; 364412 - starting-at-height-37710299; 348786 - starting-at-height-37972799; 333832 - starting-at-height-38235299; 319518 - starting-at-height-38497799; 305816 - starting-at-height-38760299; 292704 - starting-at-height-39022799; 280154 - starting-at-height-39285299; 268140 - starting-at-height-39547799; 256644 - starting-at-height-39810299; 245638 - starting-at-height-40072799; 235106 - starting-at-height-40335299; 225026 - starting-at-height-40597799; 215376 - starting-at-height-40860299; 206142 - starting-at-height-41122799; 197302 - starting-at-height-41385299; 188842 - starting-at-height-41647799; 180744 - starting-at-height-41910299; 172994 - starting-at-height-42172799; 165578 - starting-at-height-42435299; 158478 - starting-at-height-42697799; 151682 - starting-at-height-42960299; 145178 - starting-at-height-43222799; 138954 - starting-at-height-43485299; 132994 - starting-at-height-43747799; 127292 - starting-at-height-44010299; 121834 - starting-at-height-44272799; 116610 - starting-at-height-44535299; 111610 - starting-at-height-44797799; 106824 - starting-at-height-45060299; 102244 - starting-at-height-45322799; 97860 - starting-at-height-45585299; 93664 - starting-at-height-45847799; 89648 - starting-at-height-46110299; 85804 - starting-at-height-46372799; 82124 - starting-at-height-46635299; 78602 - starting-at-height-46897799; 75232 - starting-at-height-47160299; 72006 - starting-at-height-47422799; 68920 - starting-at-height-47685299; 65964 - starting-at-height-47947799; 63136 - starting-at-height-48210299; 60428 - starting-at-height-48472799; 57838 - starting-at-height-48735299; 55358 - starting-at-height-48997799; 52984 - starting-at-height-49260299; 50712 - starting-at-height-49522799; 48538 - starting-at-height-49785299; 46456 - starting-at-height-50047799; 44464 - starting-at-height-50310299; 42558 - starting-at-height-50572799; 40732 - starting-at-height-50835299; 38986 - starting-at-height-51097799; 37314 - starting-at-height-51360299; 35714 - starting-at-height-51622799; 34182 - starting-at-height-51885299; 32716 - starting-at-height-52147799; 31314 - starting-at-height-52410299; 29972 - starting-at-height-52672799; 28686 - starting-at-height-52935299; 27456 - starting-at-height-53197799; 26278 - starting-at-height-53460299; 25152 - starting-at-height-53722799; 24074 - starting-at-height-53985299; 23042 - starting-at-height-54247799; 22054 - starting-at-height-54510299; 21108 - starting-at-height-54772799; 20202 - starting-at-height-55035299; 19336 - starting-at-height-55297799; 18506 - starting-at-height-55560299; 17714 - starting-at-height-55822799; 16954 - starting-at-height-56085299; 16226 - starting-at-height-56347799; 15532 - starting-at-height-56610299; 14866 - starting-at-height-56872799; 14228 - starting-at-height-57135299; 13618 - starting-at-height-57397799; 13034 - starting-at-height-57660299; 12474 - starting-at-height-57922799; 11940 - starting-at-height-58185299; 11428 - starting-at-height-58447799; 10938 - starting-at-height-58710299; 10468 - starting-at-height-58972799; 10020 - starting-at-height-59235299; 9590 - starting-at-height-59497799; 9178 - starting-at-height-59760299; 8786 - starting-at-height-60022799; 8408 - starting-at-height-60285299; 8048 - starting-at-height-60547799; 7702 - starting-at-height-60810299; 7372 - starting-at-height-61072799; 7056 - starting-at-height-61335299; 6754 - starting-at-height-61597799; 6464 - starting-at-height-61860299; 6186 - starting-at-height-62122799; 5922 - starting-at-height-62385299; 5668 - starting-at-height-62647799; 5424 - starting-at-height-62910299; 5192 - starting-at-height-63172799; 4970 - starting-at-height-63435299; 4756 - starting-at-height-63697799; 4552 - starting-at-height-63960299; 4356 - starting-at-height-64222799; 4170 - starting-at-height-64485299; 3992 - starting-at-height-64747799; 3820 - starting-at-height-65010299; 3656 - starting-at-height-65272799; 3500 - starting-at-height-65535299; 3350 - starting-at-height-65797799; 3206 - starting-at-height-66060299; 3068 - starting-at-height-66322799; 2936 - starting-at-height-66585299; 2810 - starting-at-height-66847799; 2690 - starting-at-height-67110299; 2574 - starting-at-height-67372799; 2464 - starting-at-height-67635299; 2358 - starting-at-height-67897799; 2258 - starting-at-height-68160299; 2160 - starting-at-height-68422799; 2068 - starting-at-height-68685299; 1980 - starting-at-height-68947799; 1894 - starting-at-height-69210299; 1812 - starting-at-height-69472799; 1736 - starting-at-height-69735299; 1660 - starting-at-height-69997799; 1590 - starting-at-height-70260299; 1522 - starting-at-height-70522799; 1456 - starting-at-height-70785299; 1394 - starting-at-height-71047799; 1334 - starting-at-height-71310299; 1276 - starting-at-height-71572799; 1222 - starting-at-height-71835299; 1170 - starting-at-height-72097799; 1120 - starting-at-height-72360299; 1072 - starting-at-height-72622799; 1026 - starting-at-height-72885299; 982 - starting-at-height-73147799; 938 - starting-at-height-73410299; 898 - starting-at-height-73672799; 860 - starting-at-height-73935299; 824 - starting-at-height-74197799; 788 - starting-at-height-74460299; 754 - starting-at-height-74722799; 722 - starting-at-height-74985299; 690 - starting-at-height-75247799; 662 - starting-at-height-75510299; 632 - starting-at-height-75772799; 606 - starting-at-height-76035299; 580 - starting-at-height-76297799; 554 - starting-at-height-76560299; 530 - starting-at-height-76822799; 508 - starting-at-height-77085299; 486 - starting-at-height-77347799; 466 - starting-at-height-77610299; 446 - starting-at-height-77872799; 426 - starting-at-height-78135299; 408 - starting-at-height-78397799; 390 - starting-at-height-78660299; 374 - starting-at-height-78922799; 358 - starting-at-height-79185299; 342 - starting-at-height-79447799; 328 - starting-at-height-79710299; 314 - starting-at-height-79972799; 300 - starting-at-height-80235299; 286 - starting-at-height-80497799; 274 - starting-at-height-80760299; 262 - starting-at-height-81022799; 252 - starting-at-height-81285299; 240 - starting-at-height-81547799; 230 - starting-at-height-81810299; 220 - starting-at-height-82072799; 210 - starting-at-height-82335299; 202 - starting-at-height-82597799; 194 - starting-at-height-82860299; 184 - starting-at-height-83122799; 176 - starting-at-height-83385299; 170 - starting-at-height-83647799; 162 - starting-at-height-83910299; 154 - starting-at-height-84172799; 148 - starting-at-height-84435299; 142 - starting-at-height-84697799; 136 - starting-at-height-84960299; 130 - starting-at-height-85222799; 124 - starting-at-height-85485299; 118 - starting-at-height-85747799; 114 - starting-at-height-86010299; 108 - starting-at-height-86272799; 104 - starting-at-height-86535299; 100 - starting-at-height-86797799; 96 - starting-at-height-87060299; 92 - starting-at-height-87322799; 88 - starting-at-height-87585299; 84 - starting-at-height-87847799; 80 - starting-at-height-88110299; 76 - starting-at-height-88372799; 72 - starting-at-height-88635299; 70 - starting-at-height-88897799; 66 - starting-at-height-89160299; 64 - starting-at-height-89422799; 62 - starting-at-height-89685299; 58 - starting-at-height-89947799; 56 - starting-at-height-90210299; 54 - starting-at-height-90472799; 52 - starting-at-height-90735299; 48 - starting-at-height-90997799; 46 - starting-at-height-91260299; 44 - starting-at-height-91522799; 42 - starting-at-height-91785299; 40 - starting-at-height-92047799; 40 - starting-at-height-92310299; 38 - starting-at-height-92572799; 36 - starting-at-height-92835299; 34 - starting-at-height-93097799; 32 - starting-at-height-93360299; 32 - starting-at-height-93622799; 30 - starting-at-height-93885299; 28 - starting-at-height-94147799; 28 - starting-at-height-94410299; 26 - starting-at-height-94672799; 24 - starting-at-height-94935299; 24 - starting-at-height-95197799; 22 - starting-at-height-95460299; 22 - starting-at-height-95722799; 20 - starting-at-height-95985299; 20 - starting-at-height-96247799; 18 - starting-at-height-96510299; 18 - starting-at-height-96772799; 18 - starting-at-height-97035299; 16 - starting-at-height-97297799; 16 - starting-at-height-97560299; 14 - starting-at-height-97822799; 14 - starting-at-height-98085299; 14 - starting-at-height-98347799; 12 - starting-at-height-98610299; 12 - starting-at-height-98872799; 12 - starting-at-height-99135299; 12 - starting-at-height-99397799; 10 - starting-at-height-99660299; 10 - starting-at-height-99922799; 10 - starting-at-height-100185299; 10 - starting-at-height-100447799; 8 - starting-at-height-100710299; 8 - starting-at-height-100972799; 8 - starting-at-height-101235299; 8 - starting-at-height-101497799; 8 - starting-at-height-101760299; 6 - starting-at-height-102022799; 6 - starting-at-height-102285299; 6 - starting-at-height-102547799; 6 - starting-at-height-102810299; 6 - starting-at-height-103072799; 6 - starting-at-height-103335299; 6 - starting-at-height-103597799; 4 - starting-at-height-103860299; 4 - starting-at-height-104122799; 4 - starting-at-height-104385299; 4 - starting-at-height-104647799; 4 - starting-at-height-104910299; 4 - starting-at-height-105172799; 4 - starting-at-height-105435299; 4 - starting-at-height-105697799; 4 - starting-at-height-105960299; 2 - starting-at-height-106222799; 2 - starting-at-height-106485299; 2 - starting-at-height-106747799; 2 - starting-at-height-107010299; 2 - starting-at-height-107272799; 2 - starting-at-height-107535299; 2 - starting-at-height-107797799; 2 - starting-at-height-108060299; 2 - starting-at-height-108322799; 2 - starting-at-height-108585299; 2 - starting-at-height-108847799; 2 - starting-at-height-109110299; 2 - starting-at-height-109372799; 2 - starting-at-height-109635299; 2 - starting-at-height-109897799; 2 - starting-at-height-110160299; 1 - starting-at-height-110422799; 0 - -config-logging-broker.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_broker%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-recovery.properties -================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_recovery%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-server.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_server%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-messaging.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **messaging**; - subscriberPort; 7902 - listenInterface; 0.0.0.0 - -config-network.properties -========================= -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **network**; ; ; - identifier; public; NetworkIdentifier; Network identifier. - nemesisSignerPublicKey; BE0B4CF546B7B4F4BBFCFF9F574FDA527C07A53D3FC76F8BB7DB746F8E8E0A9F; Key; Nemesis public key. - nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. - generationHashSeed; 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6; ; - epochAdjustment; 1615853185s; utils::TimeSpan; Nemesis epoch time adjustment. - **chain**; ; ; - enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. - enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. - currencyMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used as primary chain currency. - harvestingMosaicId; 0x6BED'913F'A202'23F8; MosaicId; Mosaic id used to provide harvesting ability. - blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. - blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. - importanceGrouping; 720; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. - importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. - maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. - maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. - defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. - maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. - maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. - initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. - maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. - totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. - minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. - votingSetGrouping; 1440; ; - maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. - minVotingKeyLifetime; 112; uint32_t; Minimum number of finalization rounds for which voting key can be registered. - maxVotingKeyLifetime; 360; uint32_t; Maximum number of finalization rounds for which voting key can be registered. - harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. - harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. - harvestNetworkFeeSinkAddress; NBUTOBVT5JQDCV6UEPCPFHWWOAOPOCLA5AY5FLI; Address; Address of the harvest network fee sink account. - maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - **plugin:catapult.plugins.accountlink**; - dummy; to trigger plugin load - **plugin:catapult.plugins.aggregate**; ; ; - maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. - maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. - enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. - enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. - maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - **plugin:catapult.plugins.lockhash**; ; ; - lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. - maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - **plugin:catapult.plugins.locksecret**; ; ; - maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. - minProofSize; 0; uint16_t; Minimum size of a proof in bytes. - maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - **plugin:catapult.plugins.metadata**; ; ; - maxValueSize; 1024; uint16_t; Maximum metadata value size. - **plugin:catapult.plugins.mosaic**; ; ; - maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. - maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. - maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. - mosaicRentalFeeSinkAddress; NC733XE7DF46Q7QYLIIZBBSCJN2BEEP5FQ6PAYA; Address; Address of the mosaic rental fee sink account. - mosaicRentalFee; 500000; Amount; Mosaic rental fee. - **plugin:catapult.plugins.multisig**; ; ; - maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. - maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. - maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - **plugin:catapult.plugins.namespace**; ; ; - maxNameSize; 64; uint8_t; Maximum namespace name size. - maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. - maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. - minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. - maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. - namespaceGracePeriodDuration; 30d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. - reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. - namespaceRentalFeeSinkAddress; NBDTBUD6R32ZYJWDEWLJM4YMOX3OOILHGDUMTSA; Address; Address of the namespace rental fee sink account. - rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. - childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - **plugin:catapult.plugins.restrictionaccount**; ; ; - maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - **plugin:catapult.plugins.restrictionmosaic**; ; ; - maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - **plugin:catapult.plugins.transfer**; ; ; - maxMessageSize; 1024; uint16_t; Maximum transaction message size. - -config-node.properties -====================== -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **node**; ; ; - port; 7900; unsigned short; Server port. - maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. - enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. - enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. - enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. - enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. - fileDatabaseBatchSize; 100; ; - enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. - transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. - maxHashesPerSyncAttempt; 370; ; - maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. - maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. - shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. - shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. - shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. - shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. - minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. - maxTimeBehindPullTransactionsStart; 5m; ; - transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. - unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. - unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. - connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. - syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. - socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). - socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. - maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. - blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. - blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. - blockDisruptorMaxMemorySize; 300MB; ; - transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. - transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. - transactionDisruptorMaxMemorySize; 20MB; ; - enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. - enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. - maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. - minPartnerNodeVersion; 1.0.0.0; ; - maxPartnerNodeVersion; 1.0.255.255; ; - trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. - localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. - listenInterface; 0.0.0.0; ; - **cache_database**; - enableStatistics; false - maxOpenFiles; 0 - maxBackgroundThreads; 0 - maxSubcompactionThreads; 0 - blockCacheSize; 0MB - memtableMemoryBudget; 0MB - maxWriteBatchSize; 5MB - **localnode**; ; ; - host; ; string; Node host (leave empty to auto-detect IP). - friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). - version; 1.0.1.0; uint32_t; Node version. - roles; Peer; ionet::NodeRoles; Node roles. - **outgoing_connections**; ; ; - maxConnections; 10; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - **incoming_connections**; ; ; - maxConnections; 512; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - **banning**; ; ; - defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. - maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. - keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. - maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. - numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). - readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. - maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. - minTransactionFailuresCountForBan; 8; ; - minTransactionFailuresPercentForBan; 10; ; - -config-pt.properties -==================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **partialtransactions**; - cacheMaxResponseSize; 5MB - cacheMaxSize; 20MB - -config-task.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **logging task**; - startDelay; 1m - repeatDelay; 10m - **connect peers task for service Finalization**; - startDelay; 2s - repeatDelay; 1m - **finalization task**; - startDelay; 2m - repeatDelay; 15s - **pull finalization messages task**; - startDelay; 3s - repeatDelay; 1s - **pull finalization proof task**; - startDelay; 10s - repeatDelay; 50s - **harvesting task**; - startDelay; 30s - repeatDelay; 1s - **network chain height detection**; - startDelay; 1s - repeatDelay; 15s - **node discovery peers task**; - startDelay; 1m - minDelay; 1m - maxDelay; 10m - numPhaseOneRounds; 10 - numTransitionRounds; 20 - **node discovery ping task**; - startDelay; 2m - repeatDelay; 5m - **age peers task for service Readers**; - startDelay; 1m - repeatDelay; 1m - **batch partial transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Pt**; - startDelay; 3s - repeatDelay; 1m - **pull partial transactions task**; - startDelay; 10s - repeatDelay; 3s - **batch transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Sync**; - startDelay; 1s - repeatDelay; 1m - **pull unconfirmed transactions task**; - startDelay; 4s - repeatDelay; 3s - **synchronizer task**; - startDelay; 3s - repeatDelay; 3s - **time synchronization task**; - startDelay; 1m - minDelay; 3m - maxDelay; 180m - numPhaseOneRounds; 5 - numTransitionRounds; 10 - **static node refresh task**; - startDelay; 5ms - minDelay; 15s - maxDelay; 24h - numPhaseOneRounds; 20 - numTransitionRounds; 20 - -config-timesync.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **timesynchronization**; - maxNodes; 20 - minImportance; 10'000'000'000 - -config-user.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **account**; - enableDelegatedHarvestersAutoDetection; true - **storage**; - seedDirectory; ./seed - certificateDirectory; ./cert - dataDirectory; ./data - pluginsDirectory; /usr/catapult/lib - votingKeysDirectory; ./votingkeys diff --git a/test/reports/testnet-api/node-config.csv b/test/reports/testnet-api/node-config.csv deleted file mode 100644 index c084972f3..000000000 --- a/test/reports/testnet-api/node-config.csv +++ /dev/null @@ -1,855 +0,0 @@ -symbol-bootstrap-version; CURRENT_VERSION - -config-database.properties -database -databaseUri; mongodb://db:27017 -databaseName; catapult -maxWriterThreads; 8 -maxDropBatchSize; 10 -writeTimeout; 10m - -plugins -catapult.mongo.plugins.accountlink; true -catapult.mongo.plugins.aggregate; true -catapult.mongo.plugins.lockhash; true -catapult.mongo.plugins.locksecret; true -catapult.mongo.plugins.metadata; true -catapult.mongo.plugins.mosaic; true -catapult.mongo.plugins.multisig; true -catapult.mongo.plugins.namespace; true -catapult.mongo.plugins.restrictionaccount; true -catapult.mongo.plugins.restrictionmosaic; true -catapult.mongo.plugins.transfer; true - - -config-extensions-broker.properties -extensions -extension.addressextraction; true -extension.mongo; true -extension.zeromq; true -extension.hashcache; true - - -config-extensions-recovery.properties -extensions -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.filespooling; true -extension.hashcache; true - - -config-extensions-server.properties -extensions -extension.filespooling; true -extension.partialtransaction; true -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.harvesting; false -extension.syncsource; false -extension.diagnostics; true -extension.finalization; true -extension.hashcache; true -extension.networkheight; false -extension.nodediscovery; true -extension.packetserver; true -extension.pluginhandlers; true -extension.sync; true -extension.timesync; true -extension.transactionsink; true -extension.unbondedpruning; true - - -config-finalization.properties -finalization -enableVoting; false -enableRevoteOnBoot; false -size; 10'000 -threshold; 7'000 -stepDuration; 4m -shortLivedCacheMessageDuration; 10m -messageSynchronizationMaxResponseSize; 20MB -maxHashesPerPoint; 256 -prevoteBlocksMultiple; 4 -unfinalizedBlocksDuration; 10m - - -config-inflation.properties -inflation -starting-at-height-2; 0 -starting-at-height-5760; 191997042 -starting-at-height-172799; 183764522 -starting-at-height-435299; 175884998 -starting-at-height-697799; 168343336 -starting-at-height-960299; 161125048 -starting-at-height-1222799; 154216270 -starting-at-height-1485299; 147603728 -starting-at-height-1747799; 141274720 -starting-at-height-2010299; 135217090 -starting-at-height-2272799; 129419202 -starting-at-height-2535299; 123869918 -starting-at-height-2797799; 118558578 -starting-at-height-3060299; 113474978 -starting-at-height-3322799; 108609356 -starting-at-height-3585299; 103952364 -starting-at-height-3847799; 99495056 -starting-at-height-4110299; 95228870 -starting-at-height-4372799; 91145612 -starting-at-height-4635299; 87237436 -starting-at-height-4897799; 83496838 -starting-at-height-5160299; 79916630 -starting-at-height-5422799; 76489934 -starting-at-height-5685299; 73210170 -starting-at-height-5947799; 70071038 -starting-at-height-6210299; 67066506 -starting-at-height-6472799; 64190804 -starting-at-height-6735299; 61438406 -starting-at-height-6997799; 58804028 -starting-at-height-7260299; 56282608 -starting-at-height-7522799; 53869300 -starting-at-height-7785299; 51559472 -starting-at-height-8047799; 49348686 -starting-at-height-8310299; 47232696 -starting-at-height-8572799; 45207434 -starting-at-height-8835299; 43269014 -starting-at-height-9097799; 41413708 -starting-at-height-9360299; 39637956 -starting-at-height-9622799; 37938346 -starting-at-height-9885299; 36311610 -starting-at-height-10147799; 34754628 -starting-at-height-10410299; 33264406 -starting-at-height-10672799; 31838082 -starting-at-height-10935299; 30472918 -starting-at-height-11197799; 29166288 -starting-at-height-11460299; 27915686 -starting-at-height-11722799; 26718706 -starting-at-height-11985299; 25573052 -starting-at-height-12247799; 24476520 -starting-at-height-12510299; 23427008 -starting-at-height-12772799; 22422496 -starting-at-height-13035299; 21461056 -starting-at-height-13297799; 20540840 -starting-at-height-13560299; 19660082 -starting-at-height-13822799; 18817090 -starting-at-height-14085299; 18010244 -starting-at-height-14347799; 17237994 -starting-at-height-14610299; 16498858 -starting-at-height-14872799; 15791412 -starting-at-height-15135299; 15114302 -starting-at-height-15397799; 14466226 -starting-at-height-15660299; 13845938 -starting-at-height-15922799; 13252246 -starting-at-height-16185299; 12684012 -starting-at-height-16447799; 12140142 -starting-at-height-16710299; 11619592 -starting-at-height-16972799; 11121364 -starting-at-height-17235299; 10644498 -starting-at-height-17497799; 10188078 -starting-at-height-17760299; 9751230 -starting-at-height-18022799; 9333114 -starting-at-height-18285299; 8932924 -starting-at-height-18547799; 8549896 -starting-at-height-18810299; 8183290 -starting-at-height-19072799; 7832404 -starting-at-height-19335299; 7496562 -starting-at-height-19597799; 7175122 -starting-at-height-19860299; 6867464 -starting-at-height-20122799; 6573000 -starting-at-height-20385299; 6291160 -starting-at-height-20647799; 6021404 -starting-at-height-20910299; 5763216 -starting-at-height-21172799; 5516100 -starting-at-height-21435299; 5279578 -starting-at-height-21697799; 5053198 -starting-at-height-21960299; 4836526 -starting-at-height-22222799; 4629144 -starting-at-height-22485299; 4430652 -starting-at-height-22747799; 4240674 -starting-at-height-23010299; 4058840 -starting-at-height-23272799; 3884804 -starting-at-height-23535299; 3718230 -starting-at-height-23797799; 3558798 -starting-at-height-24060299; 3406202 -starting-at-height-24322799; 3260150 -starting-at-height-24585299; 3120360 -starting-at-height-24847799; 2986564 -starting-at-height-25110299; 2858506 -starting-at-height-25372799; 2735938 -starting-at-height-25635299; 2618624 -starting-at-height-25897799; 2506342 -starting-at-height-26160299; 2398874 -starting-at-height-26422799; 2296014 -starting-at-height-26685299; 2197564 -starting-at-height-26947799; 2103336 -starting-at-height-27210299; 2013150 -starting-at-height-27472799; 1926828 -starting-at-height-27735299; 1844210 -starting-at-height-27997799; 1765132 -starting-at-height-28260299; 1689446 -starting-at-height-28522799; 1617006 -starting-at-height-28785299; 1547672 -starting-at-height-29047799; 1481310 -starting-at-height-29310299; 1417794 -starting-at-height-29572799; 1357000 -starting-at-height-29835299; 1298814 -starting-at-height-30097799; 1243124 -starting-at-height-30360299; 1189820 -starting-at-height-30622799; 1138802 -starting-at-height-30885299; 1089972 -starting-at-height-31147799; 1043236 -starting-at-height-31410299; 998504 -starting-at-height-31672799; 955690 -starting-at-height-31935299; 914712 -starting-at-height-32197799; 875490 -starting-at-height-32460299; 837950 -starting-at-height-32722799; 802020 -starting-at-height-32985299; 767630 -starting-at-height-33247799; 734716 -starting-at-height-33510299; 703212 -starting-at-height-33772799; 673060 -starting-at-height-34035299; 644200 -starting-at-height-34297799; 616578 -starting-at-height-34560299; 590140 -starting-at-height-34822799; 564836 -starting-at-height-35085299; 540616 -starting-at-height-35347799; 517436 -starting-at-height-35610299; 495248 -starting-at-height-35872799; 474014 -starting-at-height-36135299; 453688 -starting-at-height-36397799; 434234 -starting-at-height-36660299; 415616 -starting-at-height-36922799; 397794 -starting-at-height-37185299; 380738 -starting-at-height-37447799; 364412 -starting-at-height-37710299; 348786 -starting-at-height-37972799; 333832 -starting-at-height-38235299; 319518 -starting-at-height-38497799; 305816 -starting-at-height-38760299; 292704 -starting-at-height-39022799; 280154 -starting-at-height-39285299; 268140 -starting-at-height-39547799; 256644 -starting-at-height-39810299; 245638 -starting-at-height-40072799; 235106 -starting-at-height-40335299; 225026 -starting-at-height-40597799; 215376 -starting-at-height-40860299; 206142 -starting-at-height-41122799; 197302 -starting-at-height-41385299; 188842 -starting-at-height-41647799; 180744 -starting-at-height-41910299; 172994 -starting-at-height-42172799; 165578 -starting-at-height-42435299; 158478 -starting-at-height-42697799; 151682 -starting-at-height-42960299; 145178 -starting-at-height-43222799; 138954 -starting-at-height-43485299; 132994 -starting-at-height-43747799; 127292 -starting-at-height-44010299; 121834 -starting-at-height-44272799; 116610 -starting-at-height-44535299; 111610 -starting-at-height-44797799; 106824 -starting-at-height-45060299; 102244 -starting-at-height-45322799; 97860 -starting-at-height-45585299; 93664 -starting-at-height-45847799; 89648 -starting-at-height-46110299; 85804 -starting-at-height-46372799; 82124 -starting-at-height-46635299; 78602 -starting-at-height-46897799; 75232 -starting-at-height-47160299; 72006 -starting-at-height-47422799; 68920 -starting-at-height-47685299; 65964 -starting-at-height-47947799; 63136 -starting-at-height-48210299; 60428 -starting-at-height-48472799; 57838 -starting-at-height-48735299; 55358 -starting-at-height-48997799; 52984 -starting-at-height-49260299; 50712 -starting-at-height-49522799; 48538 -starting-at-height-49785299; 46456 -starting-at-height-50047799; 44464 -starting-at-height-50310299; 42558 -starting-at-height-50572799; 40732 -starting-at-height-50835299; 38986 -starting-at-height-51097799; 37314 -starting-at-height-51360299; 35714 -starting-at-height-51622799; 34182 -starting-at-height-51885299; 32716 -starting-at-height-52147799; 31314 -starting-at-height-52410299; 29972 -starting-at-height-52672799; 28686 -starting-at-height-52935299; 27456 -starting-at-height-53197799; 26278 -starting-at-height-53460299; 25152 -starting-at-height-53722799; 24074 -starting-at-height-53985299; 23042 -starting-at-height-54247799; 22054 -starting-at-height-54510299; 21108 -starting-at-height-54772799; 20202 -starting-at-height-55035299; 19336 -starting-at-height-55297799; 18506 -starting-at-height-55560299; 17714 -starting-at-height-55822799; 16954 -starting-at-height-56085299; 16226 -starting-at-height-56347799; 15532 -starting-at-height-56610299; 14866 -starting-at-height-56872799; 14228 -starting-at-height-57135299; 13618 -starting-at-height-57397799; 13034 -starting-at-height-57660299; 12474 -starting-at-height-57922799; 11940 -starting-at-height-58185299; 11428 -starting-at-height-58447799; 10938 -starting-at-height-58710299; 10468 -starting-at-height-58972799; 10020 -starting-at-height-59235299; 9590 -starting-at-height-59497799; 9178 -starting-at-height-59760299; 8786 -starting-at-height-60022799; 8408 -starting-at-height-60285299; 8048 -starting-at-height-60547799; 7702 -starting-at-height-60810299; 7372 -starting-at-height-61072799; 7056 -starting-at-height-61335299; 6754 -starting-at-height-61597799; 6464 -starting-at-height-61860299; 6186 -starting-at-height-62122799; 5922 -starting-at-height-62385299; 5668 -starting-at-height-62647799; 5424 -starting-at-height-62910299; 5192 -starting-at-height-63172799; 4970 -starting-at-height-63435299; 4756 -starting-at-height-63697799; 4552 -starting-at-height-63960299; 4356 -starting-at-height-64222799; 4170 -starting-at-height-64485299; 3992 -starting-at-height-64747799; 3820 -starting-at-height-65010299; 3656 -starting-at-height-65272799; 3500 -starting-at-height-65535299; 3350 -starting-at-height-65797799; 3206 -starting-at-height-66060299; 3068 -starting-at-height-66322799; 2936 -starting-at-height-66585299; 2810 -starting-at-height-66847799; 2690 -starting-at-height-67110299; 2574 -starting-at-height-67372799; 2464 -starting-at-height-67635299; 2358 -starting-at-height-67897799; 2258 -starting-at-height-68160299; 2160 -starting-at-height-68422799; 2068 -starting-at-height-68685299; 1980 -starting-at-height-68947799; 1894 -starting-at-height-69210299; 1812 -starting-at-height-69472799; 1736 -starting-at-height-69735299; 1660 -starting-at-height-69997799; 1590 -starting-at-height-70260299; 1522 -starting-at-height-70522799; 1456 -starting-at-height-70785299; 1394 -starting-at-height-71047799; 1334 -starting-at-height-71310299; 1276 -starting-at-height-71572799; 1222 -starting-at-height-71835299; 1170 -starting-at-height-72097799; 1120 -starting-at-height-72360299; 1072 -starting-at-height-72622799; 1026 -starting-at-height-72885299; 982 -starting-at-height-73147799; 938 -starting-at-height-73410299; 898 -starting-at-height-73672799; 860 -starting-at-height-73935299; 824 -starting-at-height-74197799; 788 -starting-at-height-74460299; 754 -starting-at-height-74722799; 722 -starting-at-height-74985299; 690 -starting-at-height-75247799; 662 -starting-at-height-75510299; 632 -starting-at-height-75772799; 606 -starting-at-height-76035299; 580 -starting-at-height-76297799; 554 -starting-at-height-76560299; 530 -starting-at-height-76822799; 508 -starting-at-height-77085299; 486 -starting-at-height-77347799; 466 -starting-at-height-77610299; 446 -starting-at-height-77872799; 426 -starting-at-height-78135299; 408 -starting-at-height-78397799; 390 -starting-at-height-78660299; 374 -starting-at-height-78922799; 358 -starting-at-height-79185299; 342 -starting-at-height-79447799; 328 -starting-at-height-79710299; 314 -starting-at-height-79972799; 300 -starting-at-height-80235299; 286 -starting-at-height-80497799; 274 -starting-at-height-80760299; 262 -starting-at-height-81022799; 252 -starting-at-height-81285299; 240 -starting-at-height-81547799; 230 -starting-at-height-81810299; 220 -starting-at-height-82072799; 210 -starting-at-height-82335299; 202 -starting-at-height-82597799; 194 -starting-at-height-82860299; 184 -starting-at-height-83122799; 176 -starting-at-height-83385299; 170 -starting-at-height-83647799; 162 -starting-at-height-83910299; 154 -starting-at-height-84172799; 148 -starting-at-height-84435299; 142 -starting-at-height-84697799; 136 -starting-at-height-84960299; 130 -starting-at-height-85222799; 124 -starting-at-height-85485299; 118 -starting-at-height-85747799; 114 -starting-at-height-86010299; 108 -starting-at-height-86272799; 104 -starting-at-height-86535299; 100 -starting-at-height-86797799; 96 -starting-at-height-87060299; 92 -starting-at-height-87322799; 88 -starting-at-height-87585299; 84 -starting-at-height-87847799; 80 -starting-at-height-88110299; 76 -starting-at-height-88372799; 72 -starting-at-height-88635299; 70 -starting-at-height-88897799; 66 -starting-at-height-89160299; 64 -starting-at-height-89422799; 62 -starting-at-height-89685299; 58 -starting-at-height-89947799; 56 -starting-at-height-90210299; 54 -starting-at-height-90472799; 52 -starting-at-height-90735299; 48 -starting-at-height-90997799; 46 -starting-at-height-91260299; 44 -starting-at-height-91522799; 42 -starting-at-height-91785299; 40 -starting-at-height-92047799; 40 -starting-at-height-92310299; 38 -starting-at-height-92572799; 36 -starting-at-height-92835299; 34 -starting-at-height-93097799; 32 -starting-at-height-93360299; 32 -starting-at-height-93622799; 30 -starting-at-height-93885299; 28 -starting-at-height-94147799; 28 -starting-at-height-94410299; 26 -starting-at-height-94672799; 24 -starting-at-height-94935299; 24 -starting-at-height-95197799; 22 -starting-at-height-95460299; 22 -starting-at-height-95722799; 20 -starting-at-height-95985299; 20 -starting-at-height-96247799; 18 -starting-at-height-96510299; 18 -starting-at-height-96772799; 18 -starting-at-height-97035299; 16 -starting-at-height-97297799; 16 -starting-at-height-97560299; 14 -starting-at-height-97822799; 14 -starting-at-height-98085299; 14 -starting-at-height-98347799; 12 -starting-at-height-98610299; 12 -starting-at-height-98872799; 12 -starting-at-height-99135299; 12 -starting-at-height-99397799; 10 -starting-at-height-99660299; 10 -starting-at-height-99922799; 10 -starting-at-height-100185299; 10 -starting-at-height-100447799; 8 -starting-at-height-100710299; 8 -starting-at-height-100972799; 8 -starting-at-height-101235299; 8 -starting-at-height-101497799; 8 -starting-at-height-101760299; 6 -starting-at-height-102022799; 6 -starting-at-height-102285299; 6 -starting-at-height-102547799; 6 -starting-at-height-102810299; 6 -starting-at-height-103072799; 6 -starting-at-height-103335299; 6 -starting-at-height-103597799; 4 -starting-at-height-103860299; 4 -starting-at-height-104122799; 4 -starting-at-height-104385299; 4 -starting-at-height-104647799; 4 -starting-at-height-104910299; 4 -starting-at-height-105172799; 4 -starting-at-height-105435299; 4 -starting-at-height-105697799; 4 -starting-at-height-105960299; 2 -starting-at-height-106222799; 2 -starting-at-height-106485299; 2 -starting-at-height-106747799; 2 -starting-at-height-107010299; 2 -starting-at-height-107272799; 2 -starting-at-height-107535299; 2 -starting-at-height-107797799; 2 -starting-at-height-108060299; 2 -starting-at-height-108322799; 2 -starting-at-height-108585299; 2 -starting-at-height-108847799; 2 -starting-at-height-109110299; 2 -starting-at-height-109372799; 2 -starting-at-height-109635299; 2 -starting-at-height-109897799; 2 -starting-at-height-110160299; 1 -starting-at-height-110422799; 0 - - -config-logging-broker.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_broker%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-recovery.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_recovery%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-server.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_server%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-messaging.properties -messaging -subscriberPort; 7902 -listenInterface; 0.0.0.0 - - -config-network.properties -network -identifier; public-test; NetworkIdentifier; Network identifier. -nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. -nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. -generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; -epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. - -chain -enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. -enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. -currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. -harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. -blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. -blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. -importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. -importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. -maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. -maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. -defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. -maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. -maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. -initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. -maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. -totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. -minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. -votingSetGrouping; 720; ; -maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. -minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. -maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. -harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. -harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. -harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. -maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - -plugin:catapult.plugins.accountlink -dummy; to trigger plugin load - -plugin:catapult.plugins.aggregate -maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. -maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. -enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. -enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. -maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - -plugin:catapult.plugins.lockhash -lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. -maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - -plugin:catapult.plugins.locksecret -maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. -minProofSize; 0; uint16_t; Minimum size of a proof in bytes. -maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - -plugin:catapult.plugins.metadata -maxValueSize; 1024; uint16_t; Maximum metadata value size. - -plugin:catapult.plugins.mosaic -maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. -maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. -maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. -mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. -mosaicRentalFee; 500000; Amount; Mosaic rental fee. - -plugin:catapult.plugins.multisig -maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. -maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. -maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - -plugin:catapult.plugins.namespace -maxNameSize; 64; uint8_t; Maximum namespace name size. -maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. -maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. -minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. -maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. -namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. -reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. -namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. -rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. -childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - -plugin:catapult.plugins.restrictionaccount -maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - -plugin:catapult.plugins.restrictionmosaic -maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - -plugin:catapult.plugins.transfer -maxMessageSize; 1024; uint16_t; Maximum transaction message size. - - -config-node.properties -node -port; 7900; unsigned short; Server port. -maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. -enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. -enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. -enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. -enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. -fileDatabaseBatchSize; 100; ; -enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. -transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. -maxHashesPerSyncAttempt; 370; ; -maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. -maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. -shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. -shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. -shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. -shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. -minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. -maxTimeBehindPullTransactionsStart; 5m; ; -transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. -unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. -unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. -connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. -syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. -socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). -socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. -maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. -blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. -blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. -blockDisruptorMaxMemorySize; 300MB; ; -transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. -transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. -transactionDisruptorMaxMemorySize; 20MB; ; -enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. -enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. -maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. -minPartnerNodeVersion; 1.0.0.0; ; -maxPartnerNodeVersion; 1.0.255.255; ; -trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. -localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. -listenInterface; 0.0.0.0; ; - -cache_database -enableStatistics; false -maxOpenFiles; 0 -maxBackgroundThreads; 0 -maxSubcompactionThreads; 0 -blockCacheSize; 0MB -memtableMemoryBudget; 0MB -maxWriteBatchSize; 5MB - -localnode -host; ; string; Node host (leave empty to auto-detect IP). -friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). -version; 1.0.1.0; uint32_t; Node version. -roles; Api; ionet::NodeRoles; Node roles. - -outgoing_connections -maxConnections; 10; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - -incoming_connections -maxConnections; 512; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. -backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - -banning -defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. -maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. -keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. -maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. -numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). -readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. -maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. -minTransactionFailuresCountForBan; 8; ; -minTransactionFailuresPercentForBan; 10; ; - - -config-pt.properties -partialtransactions -cacheMaxResponseSize; 5MB -cacheMaxSize; 20MB - - -config-task.properties -logging task -startDelay; 1m -repeatDelay; 10m - -connect peers task for service Finalization -startDelay; 2s -repeatDelay; 1m - -finalization task -startDelay; 2m -repeatDelay; 15s - -pull finalization messages task -startDelay; 3s -repeatDelay; 1s - -pull finalization proof task -startDelay; 10s -repeatDelay; 50s - -harvesting task -startDelay; 30s -repeatDelay; 1s - -network chain height detection -startDelay; 1s -repeatDelay; 15s - -node discovery peers task -startDelay; 1m -minDelay; 1m -maxDelay; 10m -numPhaseOneRounds; 10 -numTransitionRounds; 20 - -node discovery ping task -startDelay; 2m -repeatDelay; 5m - -age peers task for service Readers -startDelay; 1m -repeatDelay; 1m - -batch partial transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Pt -startDelay; 3s -repeatDelay; 1m - -pull partial transactions task -startDelay; 10s -repeatDelay; 3s - -batch transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Sync -startDelay; 1s -repeatDelay; 1m - -pull unconfirmed transactions task -startDelay; 4s -repeatDelay; 3s - -synchronizer task -startDelay; 3s -repeatDelay; 3s - -time synchronization task -startDelay; 1m -minDelay; 3m -maxDelay; 180m -numPhaseOneRounds; 5 -numTransitionRounds; 10 - -static node refresh task -startDelay; 5ms -minDelay; 15s -maxDelay; 24h -numPhaseOneRounds; 20 -numTransitionRounds; 20 - - -config-timesync.properties -timesynchronization -maxNodes; 20 -minImportance; 10'000'000'000 - - -config-user.properties -account -enableDelegatedHarvestersAutoDetection; true - -storage -seedDirectory; ./seed -certificateDirectory; ./cert -dataDirectory; ./data -pluginsDirectory; /usr/catapult/lib -votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/test/reports/testnet-api/node-config.rst b/test/reports/testnet-api/node-config.rst deleted file mode 100644 index 704e302b3..000000000 --- a/test/reports/testnet-api/node-config.rst +++ /dev/null @@ -1,874 +0,0 @@ -Symbol Bootstrap Version: CURRENT_VERSION - -config-database.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **database**; - databaseUri; mongodb://db:27017 - databaseName; catapult - maxWriterThreads; 8 - maxDropBatchSize; 10 - writeTimeout; 10m - **plugins**; - catapult.mongo.plugins.accountlink; true - catapult.mongo.plugins.aggregate; true - catapult.mongo.plugins.lockhash; true - catapult.mongo.plugins.locksecret; true - catapult.mongo.plugins.metadata; true - catapult.mongo.plugins.mosaic; true - catapult.mongo.plugins.multisig; true - catapult.mongo.plugins.namespace; true - catapult.mongo.plugins.restrictionaccount; true - catapult.mongo.plugins.restrictionmosaic; true - catapult.mongo.plugins.transfer; true - -config-extensions-broker.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; true - extension.mongo; true - extension.zeromq; true - extension.hashcache; true - -config-extensions-recovery.properties -===================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.filespooling; true - extension.hashcache; true - -config-extensions-server.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.filespooling; true - extension.partialtransaction; true - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.harvesting; false - extension.syncsource; false - extension.diagnostics; true - extension.finalization; true - extension.hashcache; true - extension.networkheight; false - extension.nodediscovery; true - extension.packetserver; true - extension.pluginhandlers; true - extension.sync; true - extension.timesync; true - extension.transactionsink; true - extension.unbondedpruning; true - -config-finalization.properties -============================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **finalization**; - enableVoting; false - enableRevoteOnBoot; false - size; 10'000 - threshold; 7'000 - stepDuration; 4m - shortLivedCacheMessageDuration; 10m - messageSynchronizationMaxResponseSize; 20MB - maxHashesPerPoint; 256 - prevoteBlocksMultiple; 4 - unfinalizedBlocksDuration; 10m - -config-inflation.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **inflation**; - starting-at-height-2; 0 - starting-at-height-5760; 191997042 - starting-at-height-172799; 183764522 - starting-at-height-435299; 175884998 - starting-at-height-697799; 168343336 - starting-at-height-960299; 161125048 - starting-at-height-1222799; 154216270 - starting-at-height-1485299; 147603728 - starting-at-height-1747799; 141274720 - starting-at-height-2010299; 135217090 - starting-at-height-2272799; 129419202 - starting-at-height-2535299; 123869918 - starting-at-height-2797799; 118558578 - starting-at-height-3060299; 113474978 - starting-at-height-3322799; 108609356 - starting-at-height-3585299; 103952364 - starting-at-height-3847799; 99495056 - starting-at-height-4110299; 95228870 - starting-at-height-4372799; 91145612 - starting-at-height-4635299; 87237436 - starting-at-height-4897799; 83496838 - starting-at-height-5160299; 79916630 - starting-at-height-5422799; 76489934 - starting-at-height-5685299; 73210170 - starting-at-height-5947799; 70071038 - starting-at-height-6210299; 67066506 - starting-at-height-6472799; 64190804 - starting-at-height-6735299; 61438406 - starting-at-height-6997799; 58804028 - starting-at-height-7260299; 56282608 - starting-at-height-7522799; 53869300 - starting-at-height-7785299; 51559472 - starting-at-height-8047799; 49348686 - starting-at-height-8310299; 47232696 - starting-at-height-8572799; 45207434 - starting-at-height-8835299; 43269014 - starting-at-height-9097799; 41413708 - starting-at-height-9360299; 39637956 - starting-at-height-9622799; 37938346 - starting-at-height-9885299; 36311610 - starting-at-height-10147799; 34754628 - starting-at-height-10410299; 33264406 - starting-at-height-10672799; 31838082 - starting-at-height-10935299; 30472918 - starting-at-height-11197799; 29166288 - starting-at-height-11460299; 27915686 - starting-at-height-11722799; 26718706 - starting-at-height-11985299; 25573052 - starting-at-height-12247799; 24476520 - starting-at-height-12510299; 23427008 - starting-at-height-12772799; 22422496 - starting-at-height-13035299; 21461056 - starting-at-height-13297799; 20540840 - starting-at-height-13560299; 19660082 - starting-at-height-13822799; 18817090 - starting-at-height-14085299; 18010244 - starting-at-height-14347799; 17237994 - starting-at-height-14610299; 16498858 - starting-at-height-14872799; 15791412 - starting-at-height-15135299; 15114302 - starting-at-height-15397799; 14466226 - starting-at-height-15660299; 13845938 - starting-at-height-15922799; 13252246 - starting-at-height-16185299; 12684012 - starting-at-height-16447799; 12140142 - starting-at-height-16710299; 11619592 - starting-at-height-16972799; 11121364 - starting-at-height-17235299; 10644498 - starting-at-height-17497799; 10188078 - starting-at-height-17760299; 9751230 - starting-at-height-18022799; 9333114 - starting-at-height-18285299; 8932924 - starting-at-height-18547799; 8549896 - starting-at-height-18810299; 8183290 - starting-at-height-19072799; 7832404 - starting-at-height-19335299; 7496562 - starting-at-height-19597799; 7175122 - starting-at-height-19860299; 6867464 - starting-at-height-20122799; 6573000 - starting-at-height-20385299; 6291160 - starting-at-height-20647799; 6021404 - starting-at-height-20910299; 5763216 - starting-at-height-21172799; 5516100 - starting-at-height-21435299; 5279578 - starting-at-height-21697799; 5053198 - starting-at-height-21960299; 4836526 - starting-at-height-22222799; 4629144 - starting-at-height-22485299; 4430652 - starting-at-height-22747799; 4240674 - starting-at-height-23010299; 4058840 - starting-at-height-23272799; 3884804 - starting-at-height-23535299; 3718230 - starting-at-height-23797799; 3558798 - starting-at-height-24060299; 3406202 - starting-at-height-24322799; 3260150 - starting-at-height-24585299; 3120360 - starting-at-height-24847799; 2986564 - starting-at-height-25110299; 2858506 - starting-at-height-25372799; 2735938 - starting-at-height-25635299; 2618624 - starting-at-height-25897799; 2506342 - starting-at-height-26160299; 2398874 - starting-at-height-26422799; 2296014 - starting-at-height-26685299; 2197564 - starting-at-height-26947799; 2103336 - starting-at-height-27210299; 2013150 - starting-at-height-27472799; 1926828 - starting-at-height-27735299; 1844210 - starting-at-height-27997799; 1765132 - starting-at-height-28260299; 1689446 - starting-at-height-28522799; 1617006 - starting-at-height-28785299; 1547672 - starting-at-height-29047799; 1481310 - starting-at-height-29310299; 1417794 - starting-at-height-29572799; 1357000 - starting-at-height-29835299; 1298814 - starting-at-height-30097799; 1243124 - starting-at-height-30360299; 1189820 - starting-at-height-30622799; 1138802 - starting-at-height-30885299; 1089972 - starting-at-height-31147799; 1043236 - starting-at-height-31410299; 998504 - starting-at-height-31672799; 955690 - starting-at-height-31935299; 914712 - starting-at-height-32197799; 875490 - starting-at-height-32460299; 837950 - starting-at-height-32722799; 802020 - starting-at-height-32985299; 767630 - starting-at-height-33247799; 734716 - starting-at-height-33510299; 703212 - starting-at-height-33772799; 673060 - starting-at-height-34035299; 644200 - starting-at-height-34297799; 616578 - starting-at-height-34560299; 590140 - starting-at-height-34822799; 564836 - starting-at-height-35085299; 540616 - starting-at-height-35347799; 517436 - starting-at-height-35610299; 495248 - starting-at-height-35872799; 474014 - starting-at-height-36135299; 453688 - starting-at-height-36397799; 434234 - starting-at-height-36660299; 415616 - starting-at-height-36922799; 397794 - starting-at-height-37185299; 380738 - starting-at-height-37447799; 364412 - starting-at-height-37710299; 348786 - starting-at-height-37972799; 333832 - starting-at-height-38235299; 319518 - starting-at-height-38497799; 305816 - starting-at-height-38760299; 292704 - starting-at-height-39022799; 280154 - starting-at-height-39285299; 268140 - starting-at-height-39547799; 256644 - starting-at-height-39810299; 245638 - starting-at-height-40072799; 235106 - starting-at-height-40335299; 225026 - starting-at-height-40597799; 215376 - starting-at-height-40860299; 206142 - starting-at-height-41122799; 197302 - starting-at-height-41385299; 188842 - starting-at-height-41647799; 180744 - starting-at-height-41910299; 172994 - starting-at-height-42172799; 165578 - starting-at-height-42435299; 158478 - starting-at-height-42697799; 151682 - starting-at-height-42960299; 145178 - starting-at-height-43222799; 138954 - starting-at-height-43485299; 132994 - starting-at-height-43747799; 127292 - starting-at-height-44010299; 121834 - starting-at-height-44272799; 116610 - starting-at-height-44535299; 111610 - starting-at-height-44797799; 106824 - starting-at-height-45060299; 102244 - starting-at-height-45322799; 97860 - starting-at-height-45585299; 93664 - starting-at-height-45847799; 89648 - starting-at-height-46110299; 85804 - starting-at-height-46372799; 82124 - starting-at-height-46635299; 78602 - starting-at-height-46897799; 75232 - starting-at-height-47160299; 72006 - starting-at-height-47422799; 68920 - starting-at-height-47685299; 65964 - starting-at-height-47947799; 63136 - starting-at-height-48210299; 60428 - starting-at-height-48472799; 57838 - starting-at-height-48735299; 55358 - starting-at-height-48997799; 52984 - starting-at-height-49260299; 50712 - starting-at-height-49522799; 48538 - starting-at-height-49785299; 46456 - starting-at-height-50047799; 44464 - starting-at-height-50310299; 42558 - starting-at-height-50572799; 40732 - starting-at-height-50835299; 38986 - starting-at-height-51097799; 37314 - starting-at-height-51360299; 35714 - starting-at-height-51622799; 34182 - starting-at-height-51885299; 32716 - starting-at-height-52147799; 31314 - starting-at-height-52410299; 29972 - starting-at-height-52672799; 28686 - starting-at-height-52935299; 27456 - starting-at-height-53197799; 26278 - starting-at-height-53460299; 25152 - starting-at-height-53722799; 24074 - starting-at-height-53985299; 23042 - starting-at-height-54247799; 22054 - starting-at-height-54510299; 21108 - starting-at-height-54772799; 20202 - starting-at-height-55035299; 19336 - starting-at-height-55297799; 18506 - starting-at-height-55560299; 17714 - starting-at-height-55822799; 16954 - starting-at-height-56085299; 16226 - starting-at-height-56347799; 15532 - starting-at-height-56610299; 14866 - starting-at-height-56872799; 14228 - starting-at-height-57135299; 13618 - starting-at-height-57397799; 13034 - starting-at-height-57660299; 12474 - starting-at-height-57922799; 11940 - starting-at-height-58185299; 11428 - starting-at-height-58447799; 10938 - starting-at-height-58710299; 10468 - starting-at-height-58972799; 10020 - starting-at-height-59235299; 9590 - starting-at-height-59497799; 9178 - starting-at-height-59760299; 8786 - starting-at-height-60022799; 8408 - starting-at-height-60285299; 8048 - starting-at-height-60547799; 7702 - starting-at-height-60810299; 7372 - starting-at-height-61072799; 7056 - starting-at-height-61335299; 6754 - starting-at-height-61597799; 6464 - starting-at-height-61860299; 6186 - starting-at-height-62122799; 5922 - starting-at-height-62385299; 5668 - starting-at-height-62647799; 5424 - starting-at-height-62910299; 5192 - starting-at-height-63172799; 4970 - starting-at-height-63435299; 4756 - starting-at-height-63697799; 4552 - starting-at-height-63960299; 4356 - starting-at-height-64222799; 4170 - starting-at-height-64485299; 3992 - starting-at-height-64747799; 3820 - starting-at-height-65010299; 3656 - starting-at-height-65272799; 3500 - starting-at-height-65535299; 3350 - starting-at-height-65797799; 3206 - starting-at-height-66060299; 3068 - starting-at-height-66322799; 2936 - starting-at-height-66585299; 2810 - starting-at-height-66847799; 2690 - starting-at-height-67110299; 2574 - starting-at-height-67372799; 2464 - starting-at-height-67635299; 2358 - starting-at-height-67897799; 2258 - starting-at-height-68160299; 2160 - starting-at-height-68422799; 2068 - starting-at-height-68685299; 1980 - starting-at-height-68947799; 1894 - starting-at-height-69210299; 1812 - starting-at-height-69472799; 1736 - starting-at-height-69735299; 1660 - starting-at-height-69997799; 1590 - starting-at-height-70260299; 1522 - starting-at-height-70522799; 1456 - starting-at-height-70785299; 1394 - starting-at-height-71047799; 1334 - starting-at-height-71310299; 1276 - starting-at-height-71572799; 1222 - starting-at-height-71835299; 1170 - starting-at-height-72097799; 1120 - starting-at-height-72360299; 1072 - starting-at-height-72622799; 1026 - starting-at-height-72885299; 982 - starting-at-height-73147799; 938 - starting-at-height-73410299; 898 - starting-at-height-73672799; 860 - starting-at-height-73935299; 824 - starting-at-height-74197799; 788 - starting-at-height-74460299; 754 - starting-at-height-74722799; 722 - starting-at-height-74985299; 690 - starting-at-height-75247799; 662 - starting-at-height-75510299; 632 - starting-at-height-75772799; 606 - starting-at-height-76035299; 580 - starting-at-height-76297799; 554 - starting-at-height-76560299; 530 - starting-at-height-76822799; 508 - starting-at-height-77085299; 486 - starting-at-height-77347799; 466 - starting-at-height-77610299; 446 - starting-at-height-77872799; 426 - starting-at-height-78135299; 408 - starting-at-height-78397799; 390 - starting-at-height-78660299; 374 - starting-at-height-78922799; 358 - starting-at-height-79185299; 342 - starting-at-height-79447799; 328 - starting-at-height-79710299; 314 - starting-at-height-79972799; 300 - starting-at-height-80235299; 286 - starting-at-height-80497799; 274 - starting-at-height-80760299; 262 - starting-at-height-81022799; 252 - starting-at-height-81285299; 240 - starting-at-height-81547799; 230 - starting-at-height-81810299; 220 - starting-at-height-82072799; 210 - starting-at-height-82335299; 202 - starting-at-height-82597799; 194 - starting-at-height-82860299; 184 - starting-at-height-83122799; 176 - starting-at-height-83385299; 170 - starting-at-height-83647799; 162 - starting-at-height-83910299; 154 - starting-at-height-84172799; 148 - starting-at-height-84435299; 142 - starting-at-height-84697799; 136 - starting-at-height-84960299; 130 - starting-at-height-85222799; 124 - starting-at-height-85485299; 118 - starting-at-height-85747799; 114 - starting-at-height-86010299; 108 - starting-at-height-86272799; 104 - starting-at-height-86535299; 100 - starting-at-height-86797799; 96 - starting-at-height-87060299; 92 - starting-at-height-87322799; 88 - starting-at-height-87585299; 84 - starting-at-height-87847799; 80 - starting-at-height-88110299; 76 - starting-at-height-88372799; 72 - starting-at-height-88635299; 70 - starting-at-height-88897799; 66 - starting-at-height-89160299; 64 - starting-at-height-89422799; 62 - starting-at-height-89685299; 58 - starting-at-height-89947799; 56 - starting-at-height-90210299; 54 - starting-at-height-90472799; 52 - starting-at-height-90735299; 48 - starting-at-height-90997799; 46 - starting-at-height-91260299; 44 - starting-at-height-91522799; 42 - starting-at-height-91785299; 40 - starting-at-height-92047799; 40 - starting-at-height-92310299; 38 - starting-at-height-92572799; 36 - starting-at-height-92835299; 34 - starting-at-height-93097799; 32 - starting-at-height-93360299; 32 - starting-at-height-93622799; 30 - starting-at-height-93885299; 28 - starting-at-height-94147799; 28 - starting-at-height-94410299; 26 - starting-at-height-94672799; 24 - starting-at-height-94935299; 24 - starting-at-height-95197799; 22 - starting-at-height-95460299; 22 - starting-at-height-95722799; 20 - starting-at-height-95985299; 20 - starting-at-height-96247799; 18 - starting-at-height-96510299; 18 - starting-at-height-96772799; 18 - starting-at-height-97035299; 16 - starting-at-height-97297799; 16 - starting-at-height-97560299; 14 - starting-at-height-97822799; 14 - starting-at-height-98085299; 14 - starting-at-height-98347799; 12 - starting-at-height-98610299; 12 - starting-at-height-98872799; 12 - starting-at-height-99135299; 12 - starting-at-height-99397799; 10 - starting-at-height-99660299; 10 - starting-at-height-99922799; 10 - starting-at-height-100185299; 10 - starting-at-height-100447799; 8 - starting-at-height-100710299; 8 - starting-at-height-100972799; 8 - starting-at-height-101235299; 8 - starting-at-height-101497799; 8 - starting-at-height-101760299; 6 - starting-at-height-102022799; 6 - starting-at-height-102285299; 6 - starting-at-height-102547799; 6 - starting-at-height-102810299; 6 - starting-at-height-103072799; 6 - starting-at-height-103335299; 6 - starting-at-height-103597799; 4 - starting-at-height-103860299; 4 - starting-at-height-104122799; 4 - starting-at-height-104385299; 4 - starting-at-height-104647799; 4 - starting-at-height-104910299; 4 - starting-at-height-105172799; 4 - starting-at-height-105435299; 4 - starting-at-height-105697799; 4 - starting-at-height-105960299; 2 - starting-at-height-106222799; 2 - starting-at-height-106485299; 2 - starting-at-height-106747799; 2 - starting-at-height-107010299; 2 - starting-at-height-107272799; 2 - starting-at-height-107535299; 2 - starting-at-height-107797799; 2 - starting-at-height-108060299; 2 - starting-at-height-108322799; 2 - starting-at-height-108585299; 2 - starting-at-height-108847799; 2 - starting-at-height-109110299; 2 - starting-at-height-109372799; 2 - starting-at-height-109635299; 2 - starting-at-height-109897799; 2 - starting-at-height-110160299; 1 - starting-at-height-110422799; 0 - -config-logging-broker.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_broker%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-recovery.properties -================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_recovery%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-server.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_server%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-messaging.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **messaging**; - subscriberPort; 7902 - listenInterface; 0.0.0.0 - -config-network.properties -========================= -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **network**; ; ; - identifier; public-test; NetworkIdentifier; Network identifier. - nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. - nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. - generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; - epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. - **chain**; ; ; - enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. - enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. - currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. - harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. - blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. - blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. - importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. - importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. - maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. - maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. - defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. - maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. - maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. - initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. - maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. - totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. - minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. - votingSetGrouping; 720; ; - maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. - minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. - maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. - harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. - harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. - harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. - maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - **plugin:catapult.plugins.accountlink**; - dummy; to trigger plugin load - **plugin:catapult.plugins.aggregate**; ; ; - maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. - maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. - enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. - enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. - maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - **plugin:catapult.plugins.lockhash**; ; ; - lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. - maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - **plugin:catapult.plugins.locksecret**; ; ; - maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. - minProofSize; 0; uint16_t; Minimum size of a proof in bytes. - maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - **plugin:catapult.plugins.metadata**; ; ; - maxValueSize; 1024; uint16_t; Maximum metadata value size. - **plugin:catapult.plugins.mosaic**; ; ; - maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. - maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. - maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. - mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. - mosaicRentalFee; 500000; Amount; Mosaic rental fee. - **plugin:catapult.plugins.multisig**; ; ; - maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. - maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. - maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - **plugin:catapult.plugins.namespace**; ; ; - maxNameSize; 64; uint8_t; Maximum namespace name size. - maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. - maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. - minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. - maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. - namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. - reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. - namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. - rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. - childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - **plugin:catapult.plugins.restrictionaccount**; ; ; - maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - **plugin:catapult.plugins.restrictionmosaic**; ; ; - maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - **plugin:catapult.plugins.transfer**; ; ; - maxMessageSize; 1024; uint16_t; Maximum transaction message size. - -config-node.properties -====================== -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **node**; ; ; - port; 7900; unsigned short; Server port. - maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. - enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. - enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. - enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. - enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. - fileDatabaseBatchSize; 100; ; - enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. - transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. - maxHashesPerSyncAttempt; 370; ; - maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. - maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. - shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. - shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. - shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. - shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. - minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. - maxTimeBehindPullTransactionsStart; 5m; ; - transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. - unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. - unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. - connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. - syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. - socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). - socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. - maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. - blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. - blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. - blockDisruptorMaxMemorySize; 300MB; ; - transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. - transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. - transactionDisruptorMaxMemorySize; 20MB; ; - enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. - enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. - maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. - minPartnerNodeVersion; 1.0.0.0; ; - maxPartnerNodeVersion; 1.0.255.255; ; - trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. - localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. - listenInterface; 0.0.0.0; ; - **cache_database**; - enableStatistics; false - maxOpenFiles; 0 - maxBackgroundThreads; 0 - maxSubcompactionThreads; 0 - blockCacheSize; 0MB - memtableMemoryBudget; 0MB - maxWriteBatchSize; 5MB - **localnode**; ; ; - host; ; string; Node host (leave empty to auto-detect IP). - friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). - version; 1.0.1.0; uint32_t; Node version. - roles; Api; ionet::NodeRoles; Node roles. - **outgoing_connections**; ; ; - maxConnections; 10; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - **incoming_connections**; ; ; - maxConnections; 512; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - **banning**; ; ; - defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. - maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. - keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. - maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. - numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). - readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. - maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. - minTransactionFailuresCountForBan; 8; ; - minTransactionFailuresPercentForBan; 10; ; - -config-pt.properties -==================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **partialtransactions**; - cacheMaxResponseSize; 5MB - cacheMaxSize; 20MB - -config-task.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **logging task**; - startDelay; 1m - repeatDelay; 10m - **connect peers task for service Finalization**; - startDelay; 2s - repeatDelay; 1m - **finalization task**; - startDelay; 2m - repeatDelay; 15s - **pull finalization messages task**; - startDelay; 3s - repeatDelay; 1s - **pull finalization proof task**; - startDelay; 10s - repeatDelay; 50s - **harvesting task**; - startDelay; 30s - repeatDelay; 1s - **network chain height detection**; - startDelay; 1s - repeatDelay; 15s - **node discovery peers task**; - startDelay; 1m - minDelay; 1m - maxDelay; 10m - numPhaseOneRounds; 10 - numTransitionRounds; 20 - **node discovery ping task**; - startDelay; 2m - repeatDelay; 5m - **age peers task for service Readers**; - startDelay; 1m - repeatDelay; 1m - **batch partial transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Pt**; - startDelay; 3s - repeatDelay; 1m - **pull partial transactions task**; - startDelay; 10s - repeatDelay; 3s - **batch transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Sync**; - startDelay; 1s - repeatDelay; 1m - **pull unconfirmed transactions task**; - startDelay; 4s - repeatDelay; 3s - **synchronizer task**; - startDelay; 3s - repeatDelay; 3s - **time synchronization task**; - startDelay; 1m - minDelay; 3m - maxDelay; 180m - numPhaseOneRounds; 5 - numTransitionRounds; 10 - **static node refresh task**; - startDelay; 5ms - minDelay; 15s - maxDelay; 24h - numPhaseOneRounds; 20 - numTransitionRounds; 20 - -config-timesync.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **timesynchronization**; - maxNodes; 20 - minImportance; 10'000'000'000 - -config-user.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **account**; - enableDelegatedHarvestersAutoDetection; true - **storage**; - seedDirectory; ./seed - certificateDirectory; ./cert - dataDirectory; ./data - pluginsDirectory; /usr/catapult/lib - votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/test/reports/testnet-api/rest-gateway-rest.json b/test/reports/testnet-api/rest-gateway-rest.json deleted file mode 100644 index d01383936..000000000 --- a/test/reports/testnet-api/rest-gateway-rest.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "network": { - "name": "publicTest", - "description": "catapult public test network" - }, - "port": 3000, - "crossDomain": { - "allowedHosts": [ - "*" - ], - "allowedMethods": [ - "GET", - "POST", - "PUT", - "OPTIONS" - ] - }, - "extensions": [ - "accountLink", - "aggregate", - "lockHash", - "lockSecret", - "mosaic", - "metadata", - "multisig", - "namespace", - "receipts", - "restrictions", - "transfer", - "cmc" - ], - "db": { - "url": "mongodb://db:27017/", - "name": "catapult", - "pageSizeMin": 10, - "pageSizeMax": 100, - "maxConnectionAttempts": 15, - "baseRetryDelay": 750, - "connectionPoolSize": 10 - }, - "apiNode": { - "host": "node", - "port": 7900, - "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", - "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", - "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", - "timeout": 1000, - "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", - "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" - }, - "websocket": { - "mq": { - "host": "broker", - "port": 7902, - "monitorInterval": 500, - "connectTimeout": 10000, - "monitorLoggingThrottle": 60000, - "maxSubscriptions": 300 - }, - "allowOptionalAddress": true - }, - "throttling": { - "burst": 80, - "rate": 60 - }, - "logging": { - "console": { - "formats": [ - "colorize", - "simple" - ], - "level": "verbose", - "handleExceptions": true - }, - "file": { - "formats": [ - "prettyPrint" - ], - "level": "verbose", - "handleExceptions": true, - "filename": "/symbol-workdir/logs/catapult-rest.log", - "maxsize": 20971520, - "maxFiles": 100 - } - }, - "numBlocksTransactionFeeStats": 300, - "deployment": { - "deploymentTool": "symbol-bootstrap", - "deploymentToolVersion": "ABC", - "lastUpdatedDate": "2021-05-23" - } -} diff --git a/test/reports/testnet-dual-voting/node-config.csv b/test/reports/testnet-dual-voting/node-config.csv deleted file mode 100644 index 3c72a2624..000000000 --- a/test/reports/testnet-dual-voting/node-config.csv +++ /dev/null @@ -1,865 +0,0 @@ -symbol-bootstrap-version; CURRENT_VERSION - -config-database.properties -database -databaseUri; mongodb://db:27017 -databaseName; catapult -maxWriterThreads; 8 -maxDropBatchSize; 10 -writeTimeout; 10m - -plugins -catapult.mongo.plugins.accountlink; true -catapult.mongo.plugins.aggregate; true -catapult.mongo.plugins.lockhash; true -catapult.mongo.plugins.locksecret; true -catapult.mongo.plugins.metadata; true -catapult.mongo.plugins.mosaic; true -catapult.mongo.plugins.multisig; true -catapult.mongo.plugins.namespace; true -catapult.mongo.plugins.restrictionaccount; true -catapult.mongo.plugins.restrictionmosaic; true -catapult.mongo.plugins.transfer; true - - -config-extensions-broker.properties -extensions -extension.addressextraction; true -extension.mongo; true -extension.zeromq; true -extension.hashcache; true - - -config-extensions-recovery.properties -extensions -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.filespooling; true -extension.hashcache; true - - -config-extensions-server.properties -extensions -extension.filespooling; true -extension.partialtransaction; true -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.harvesting; true -extension.syncsource; true -extension.diagnostics; true -extension.finalization; true -extension.hashcache; true -extension.networkheight; false -extension.nodediscovery; true -extension.packetserver; true -extension.pluginhandlers; true -extension.sync; true -extension.timesync; true -extension.transactionsink; true -extension.unbondedpruning; true - - -config-finalization.properties -finalization -enableVoting; true -enableRevoteOnBoot; false -size; 10'000 -threshold; 7'000 -stepDuration; 4m -shortLivedCacheMessageDuration; 10m -messageSynchronizationMaxResponseSize; 20MB -maxHashesPerPoint; 256 -prevoteBlocksMultiple; 4 -unfinalizedBlocksDuration; 0m - - -config-harvesting.properties -harvesting -harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. -harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. -enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. -maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. -delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. -beneficiaryAddress; TDQ32MTJICEPJDU45KVN7BAM4A4GI7OARMLVSXQ; Address; Address of the account receiving part of the harvested fee. - - -config-inflation.properties -inflation -starting-at-height-2; 0 -starting-at-height-5760; 191997042 -starting-at-height-172799; 183764522 -starting-at-height-435299; 175884998 -starting-at-height-697799; 168343336 -starting-at-height-960299; 161125048 -starting-at-height-1222799; 154216270 -starting-at-height-1485299; 147603728 -starting-at-height-1747799; 141274720 -starting-at-height-2010299; 135217090 -starting-at-height-2272799; 129419202 -starting-at-height-2535299; 123869918 -starting-at-height-2797799; 118558578 -starting-at-height-3060299; 113474978 -starting-at-height-3322799; 108609356 -starting-at-height-3585299; 103952364 -starting-at-height-3847799; 99495056 -starting-at-height-4110299; 95228870 -starting-at-height-4372799; 91145612 -starting-at-height-4635299; 87237436 -starting-at-height-4897799; 83496838 -starting-at-height-5160299; 79916630 -starting-at-height-5422799; 76489934 -starting-at-height-5685299; 73210170 -starting-at-height-5947799; 70071038 -starting-at-height-6210299; 67066506 -starting-at-height-6472799; 64190804 -starting-at-height-6735299; 61438406 -starting-at-height-6997799; 58804028 -starting-at-height-7260299; 56282608 -starting-at-height-7522799; 53869300 -starting-at-height-7785299; 51559472 -starting-at-height-8047799; 49348686 -starting-at-height-8310299; 47232696 -starting-at-height-8572799; 45207434 -starting-at-height-8835299; 43269014 -starting-at-height-9097799; 41413708 -starting-at-height-9360299; 39637956 -starting-at-height-9622799; 37938346 -starting-at-height-9885299; 36311610 -starting-at-height-10147799; 34754628 -starting-at-height-10410299; 33264406 -starting-at-height-10672799; 31838082 -starting-at-height-10935299; 30472918 -starting-at-height-11197799; 29166288 -starting-at-height-11460299; 27915686 -starting-at-height-11722799; 26718706 -starting-at-height-11985299; 25573052 -starting-at-height-12247799; 24476520 -starting-at-height-12510299; 23427008 -starting-at-height-12772799; 22422496 -starting-at-height-13035299; 21461056 -starting-at-height-13297799; 20540840 -starting-at-height-13560299; 19660082 -starting-at-height-13822799; 18817090 -starting-at-height-14085299; 18010244 -starting-at-height-14347799; 17237994 -starting-at-height-14610299; 16498858 -starting-at-height-14872799; 15791412 -starting-at-height-15135299; 15114302 -starting-at-height-15397799; 14466226 -starting-at-height-15660299; 13845938 -starting-at-height-15922799; 13252246 -starting-at-height-16185299; 12684012 -starting-at-height-16447799; 12140142 -starting-at-height-16710299; 11619592 -starting-at-height-16972799; 11121364 -starting-at-height-17235299; 10644498 -starting-at-height-17497799; 10188078 -starting-at-height-17760299; 9751230 -starting-at-height-18022799; 9333114 -starting-at-height-18285299; 8932924 -starting-at-height-18547799; 8549896 -starting-at-height-18810299; 8183290 -starting-at-height-19072799; 7832404 -starting-at-height-19335299; 7496562 -starting-at-height-19597799; 7175122 -starting-at-height-19860299; 6867464 -starting-at-height-20122799; 6573000 -starting-at-height-20385299; 6291160 -starting-at-height-20647799; 6021404 -starting-at-height-20910299; 5763216 -starting-at-height-21172799; 5516100 -starting-at-height-21435299; 5279578 -starting-at-height-21697799; 5053198 -starting-at-height-21960299; 4836526 -starting-at-height-22222799; 4629144 -starting-at-height-22485299; 4430652 -starting-at-height-22747799; 4240674 -starting-at-height-23010299; 4058840 -starting-at-height-23272799; 3884804 -starting-at-height-23535299; 3718230 -starting-at-height-23797799; 3558798 -starting-at-height-24060299; 3406202 -starting-at-height-24322799; 3260150 -starting-at-height-24585299; 3120360 -starting-at-height-24847799; 2986564 -starting-at-height-25110299; 2858506 -starting-at-height-25372799; 2735938 -starting-at-height-25635299; 2618624 -starting-at-height-25897799; 2506342 -starting-at-height-26160299; 2398874 -starting-at-height-26422799; 2296014 -starting-at-height-26685299; 2197564 -starting-at-height-26947799; 2103336 -starting-at-height-27210299; 2013150 -starting-at-height-27472799; 1926828 -starting-at-height-27735299; 1844210 -starting-at-height-27997799; 1765132 -starting-at-height-28260299; 1689446 -starting-at-height-28522799; 1617006 -starting-at-height-28785299; 1547672 -starting-at-height-29047799; 1481310 -starting-at-height-29310299; 1417794 -starting-at-height-29572799; 1357000 -starting-at-height-29835299; 1298814 -starting-at-height-30097799; 1243124 -starting-at-height-30360299; 1189820 -starting-at-height-30622799; 1138802 -starting-at-height-30885299; 1089972 -starting-at-height-31147799; 1043236 -starting-at-height-31410299; 998504 -starting-at-height-31672799; 955690 -starting-at-height-31935299; 914712 -starting-at-height-32197799; 875490 -starting-at-height-32460299; 837950 -starting-at-height-32722799; 802020 -starting-at-height-32985299; 767630 -starting-at-height-33247799; 734716 -starting-at-height-33510299; 703212 -starting-at-height-33772799; 673060 -starting-at-height-34035299; 644200 -starting-at-height-34297799; 616578 -starting-at-height-34560299; 590140 -starting-at-height-34822799; 564836 -starting-at-height-35085299; 540616 -starting-at-height-35347799; 517436 -starting-at-height-35610299; 495248 -starting-at-height-35872799; 474014 -starting-at-height-36135299; 453688 -starting-at-height-36397799; 434234 -starting-at-height-36660299; 415616 -starting-at-height-36922799; 397794 -starting-at-height-37185299; 380738 -starting-at-height-37447799; 364412 -starting-at-height-37710299; 348786 -starting-at-height-37972799; 333832 -starting-at-height-38235299; 319518 -starting-at-height-38497799; 305816 -starting-at-height-38760299; 292704 -starting-at-height-39022799; 280154 -starting-at-height-39285299; 268140 -starting-at-height-39547799; 256644 -starting-at-height-39810299; 245638 -starting-at-height-40072799; 235106 -starting-at-height-40335299; 225026 -starting-at-height-40597799; 215376 -starting-at-height-40860299; 206142 -starting-at-height-41122799; 197302 -starting-at-height-41385299; 188842 -starting-at-height-41647799; 180744 -starting-at-height-41910299; 172994 -starting-at-height-42172799; 165578 -starting-at-height-42435299; 158478 -starting-at-height-42697799; 151682 -starting-at-height-42960299; 145178 -starting-at-height-43222799; 138954 -starting-at-height-43485299; 132994 -starting-at-height-43747799; 127292 -starting-at-height-44010299; 121834 -starting-at-height-44272799; 116610 -starting-at-height-44535299; 111610 -starting-at-height-44797799; 106824 -starting-at-height-45060299; 102244 -starting-at-height-45322799; 97860 -starting-at-height-45585299; 93664 -starting-at-height-45847799; 89648 -starting-at-height-46110299; 85804 -starting-at-height-46372799; 82124 -starting-at-height-46635299; 78602 -starting-at-height-46897799; 75232 -starting-at-height-47160299; 72006 -starting-at-height-47422799; 68920 -starting-at-height-47685299; 65964 -starting-at-height-47947799; 63136 -starting-at-height-48210299; 60428 -starting-at-height-48472799; 57838 -starting-at-height-48735299; 55358 -starting-at-height-48997799; 52984 -starting-at-height-49260299; 50712 -starting-at-height-49522799; 48538 -starting-at-height-49785299; 46456 -starting-at-height-50047799; 44464 -starting-at-height-50310299; 42558 -starting-at-height-50572799; 40732 -starting-at-height-50835299; 38986 -starting-at-height-51097799; 37314 -starting-at-height-51360299; 35714 -starting-at-height-51622799; 34182 -starting-at-height-51885299; 32716 -starting-at-height-52147799; 31314 -starting-at-height-52410299; 29972 -starting-at-height-52672799; 28686 -starting-at-height-52935299; 27456 -starting-at-height-53197799; 26278 -starting-at-height-53460299; 25152 -starting-at-height-53722799; 24074 -starting-at-height-53985299; 23042 -starting-at-height-54247799; 22054 -starting-at-height-54510299; 21108 -starting-at-height-54772799; 20202 -starting-at-height-55035299; 19336 -starting-at-height-55297799; 18506 -starting-at-height-55560299; 17714 -starting-at-height-55822799; 16954 -starting-at-height-56085299; 16226 -starting-at-height-56347799; 15532 -starting-at-height-56610299; 14866 -starting-at-height-56872799; 14228 -starting-at-height-57135299; 13618 -starting-at-height-57397799; 13034 -starting-at-height-57660299; 12474 -starting-at-height-57922799; 11940 -starting-at-height-58185299; 11428 -starting-at-height-58447799; 10938 -starting-at-height-58710299; 10468 -starting-at-height-58972799; 10020 -starting-at-height-59235299; 9590 -starting-at-height-59497799; 9178 -starting-at-height-59760299; 8786 -starting-at-height-60022799; 8408 -starting-at-height-60285299; 8048 -starting-at-height-60547799; 7702 -starting-at-height-60810299; 7372 -starting-at-height-61072799; 7056 -starting-at-height-61335299; 6754 -starting-at-height-61597799; 6464 -starting-at-height-61860299; 6186 -starting-at-height-62122799; 5922 -starting-at-height-62385299; 5668 -starting-at-height-62647799; 5424 -starting-at-height-62910299; 5192 -starting-at-height-63172799; 4970 -starting-at-height-63435299; 4756 -starting-at-height-63697799; 4552 -starting-at-height-63960299; 4356 -starting-at-height-64222799; 4170 -starting-at-height-64485299; 3992 -starting-at-height-64747799; 3820 -starting-at-height-65010299; 3656 -starting-at-height-65272799; 3500 -starting-at-height-65535299; 3350 -starting-at-height-65797799; 3206 -starting-at-height-66060299; 3068 -starting-at-height-66322799; 2936 -starting-at-height-66585299; 2810 -starting-at-height-66847799; 2690 -starting-at-height-67110299; 2574 -starting-at-height-67372799; 2464 -starting-at-height-67635299; 2358 -starting-at-height-67897799; 2258 -starting-at-height-68160299; 2160 -starting-at-height-68422799; 2068 -starting-at-height-68685299; 1980 -starting-at-height-68947799; 1894 -starting-at-height-69210299; 1812 -starting-at-height-69472799; 1736 -starting-at-height-69735299; 1660 -starting-at-height-69997799; 1590 -starting-at-height-70260299; 1522 -starting-at-height-70522799; 1456 -starting-at-height-70785299; 1394 -starting-at-height-71047799; 1334 -starting-at-height-71310299; 1276 -starting-at-height-71572799; 1222 -starting-at-height-71835299; 1170 -starting-at-height-72097799; 1120 -starting-at-height-72360299; 1072 -starting-at-height-72622799; 1026 -starting-at-height-72885299; 982 -starting-at-height-73147799; 938 -starting-at-height-73410299; 898 -starting-at-height-73672799; 860 -starting-at-height-73935299; 824 -starting-at-height-74197799; 788 -starting-at-height-74460299; 754 -starting-at-height-74722799; 722 -starting-at-height-74985299; 690 -starting-at-height-75247799; 662 -starting-at-height-75510299; 632 -starting-at-height-75772799; 606 -starting-at-height-76035299; 580 -starting-at-height-76297799; 554 -starting-at-height-76560299; 530 -starting-at-height-76822799; 508 -starting-at-height-77085299; 486 -starting-at-height-77347799; 466 -starting-at-height-77610299; 446 -starting-at-height-77872799; 426 -starting-at-height-78135299; 408 -starting-at-height-78397799; 390 -starting-at-height-78660299; 374 -starting-at-height-78922799; 358 -starting-at-height-79185299; 342 -starting-at-height-79447799; 328 -starting-at-height-79710299; 314 -starting-at-height-79972799; 300 -starting-at-height-80235299; 286 -starting-at-height-80497799; 274 -starting-at-height-80760299; 262 -starting-at-height-81022799; 252 -starting-at-height-81285299; 240 -starting-at-height-81547799; 230 -starting-at-height-81810299; 220 -starting-at-height-82072799; 210 -starting-at-height-82335299; 202 -starting-at-height-82597799; 194 -starting-at-height-82860299; 184 -starting-at-height-83122799; 176 -starting-at-height-83385299; 170 -starting-at-height-83647799; 162 -starting-at-height-83910299; 154 -starting-at-height-84172799; 148 -starting-at-height-84435299; 142 -starting-at-height-84697799; 136 -starting-at-height-84960299; 130 -starting-at-height-85222799; 124 -starting-at-height-85485299; 118 -starting-at-height-85747799; 114 -starting-at-height-86010299; 108 -starting-at-height-86272799; 104 -starting-at-height-86535299; 100 -starting-at-height-86797799; 96 -starting-at-height-87060299; 92 -starting-at-height-87322799; 88 -starting-at-height-87585299; 84 -starting-at-height-87847799; 80 -starting-at-height-88110299; 76 -starting-at-height-88372799; 72 -starting-at-height-88635299; 70 -starting-at-height-88897799; 66 -starting-at-height-89160299; 64 -starting-at-height-89422799; 62 -starting-at-height-89685299; 58 -starting-at-height-89947799; 56 -starting-at-height-90210299; 54 -starting-at-height-90472799; 52 -starting-at-height-90735299; 48 -starting-at-height-90997799; 46 -starting-at-height-91260299; 44 -starting-at-height-91522799; 42 -starting-at-height-91785299; 40 -starting-at-height-92047799; 40 -starting-at-height-92310299; 38 -starting-at-height-92572799; 36 -starting-at-height-92835299; 34 -starting-at-height-93097799; 32 -starting-at-height-93360299; 32 -starting-at-height-93622799; 30 -starting-at-height-93885299; 28 -starting-at-height-94147799; 28 -starting-at-height-94410299; 26 -starting-at-height-94672799; 24 -starting-at-height-94935299; 24 -starting-at-height-95197799; 22 -starting-at-height-95460299; 22 -starting-at-height-95722799; 20 -starting-at-height-95985299; 20 -starting-at-height-96247799; 18 -starting-at-height-96510299; 18 -starting-at-height-96772799; 18 -starting-at-height-97035299; 16 -starting-at-height-97297799; 16 -starting-at-height-97560299; 14 -starting-at-height-97822799; 14 -starting-at-height-98085299; 14 -starting-at-height-98347799; 12 -starting-at-height-98610299; 12 -starting-at-height-98872799; 12 -starting-at-height-99135299; 12 -starting-at-height-99397799; 10 -starting-at-height-99660299; 10 -starting-at-height-99922799; 10 -starting-at-height-100185299; 10 -starting-at-height-100447799; 8 -starting-at-height-100710299; 8 -starting-at-height-100972799; 8 -starting-at-height-101235299; 8 -starting-at-height-101497799; 8 -starting-at-height-101760299; 6 -starting-at-height-102022799; 6 -starting-at-height-102285299; 6 -starting-at-height-102547799; 6 -starting-at-height-102810299; 6 -starting-at-height-103072799; 6 -starting-at-height-103335299; 6 -starting-at-height-103597799; 4 -starting-at-height-103860299; 4 -starting-at-height-104122799; 4 -starting-at-height-104385299; 4 -starting-at-height-104647799; 4 -starting-at-height-104910299; 4 -starting-at-height-105172799; 4 -starting-at-height-105435299; 4 -starting-at-height-105697799; 4 -starting-at-height-105960299; 2 -starting-at-height-106222799; 2 -starting-at-height-106485299; 2 -starting-at-height-106747799; 2 -starting-at-height-107010299; 2 -starting-at-height-107272799; 2 -starting-at-height-107535299; 2 -starting-at-height-107797799; 2 -starting-at-height-108060299; 2 -starting-at-height-108322799; 2 -starting-at-height-108585299; 2 -starting-at-height-108847799; 2 -starting-at-height-109110299; 2 -starting-at-height-109372799; 2 -starting-at-height-109635299; 2 -starting-at-height-109897799; 2 -starting-at-height-110160299; 1 -starting-at-height-110422799; 0 - - -config-logging-broker.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_broker%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-recovery.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_recovery%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-server.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_server%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-messaging.properties -messaging -subscriberPort; 7902 -listenInterface; 0.0.0.0 - - -config-network.properties -network -identifier; public-test; NetworkIdentifier; Network identifier. -nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. -nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. -generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; -epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. - -chain -enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. -enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. -currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. -harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. -blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. -blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. -importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. -importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. -maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. -maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. -defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. -maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. -maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. -initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. -maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. -totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. -minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. -votingSetGrouping; 720; ; -maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. -minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. -maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. -harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. -harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. -harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. -maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - -plugin:catapult.plugins.accountlink -dummy; to trigger plugin load - -plugin:catapult.plugins.aggregate -maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. -maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. -enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. -enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. -maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - -plugin:catapult.plugins.lockhash -lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. -maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - -plugin:catapult.plugins.locksecret -maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. -minProofSize; 0; uint16_t; Minimum size of a proof in bytes. -maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - -plugin:catapult.plugins.metadata -maxValueSize; 1024; uint16_t; Maximum metadata value size. - -plugin:catapult.plugins.mosaic -maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. -maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. -maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. -mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. -mosaicRentalFee; 500000; Amount; Mosaic rental fee. - -plugin:catapult.plugins.multisig -maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. -maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. -maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - -plugin:catapult.plugins.namespace -maxNameSize; 64; uint8_t; Maximum namespace name size. -maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. -maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. -minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. -maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. -namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. -reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. -namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. -rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. -childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - -plugin:catapult.plugins.restrictionaccount -maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - -plugin:catapult.plugins.restrictionmosaic -maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - -plugin:catapult.plugins.transfer -maxMessageSize; 1024; uint16_t; Maximum transaction message size. - - -config-node.properties -node -port; 7900; unsigned short; Server port. -maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. -enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. -enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. -enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. -enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. -fileDatabaseBatchSize; 100; ; -enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. -transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. -maxHashesPerSyncAttempt; 370; ; -maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. -maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. -shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. -shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. -shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. -shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. -minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. -maxTimeBehindPullTransactionsStart; 5m; ; -transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. -unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. -unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. -connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. -syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. -socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). -socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. -maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. -blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. -blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. -blockDisruptorMaxMemorySize; 300MB; ; -transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. -transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. -transactionDisruptorMaxMemorySize; 20MB; ; -enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. -enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. -maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. -minPartnerNodeVersion; 1.0.0.0; ; -maxPartnerNodeVersion; 1.0.255.255; ; -trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. -localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. -listenInterface; 0.0.0.0; ; - -cache_database -enableStatistics; false -maxOpenFiles; 0 -maxBackgroundThreads; 0 -maxSubcompactionThreads; 0 -blockCacheSize; 0MB -memtableMemoryBudget; 0MB -maxWriteBatchSize; 5MB - -localnode -host; ; string; Node host (leave empty to auto-detect IP). -friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). -version; 1.0.1.0; uint32_t; Node version. -roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. - -outgoing_connections -maxConnections; 10; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - -incoming_connections -maxConnections; 512; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. -backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - -banning -defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. -maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. -keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. -maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. -numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). -readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. -maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. -minTransactionFailuresCountForBan; 8; ; -minTransactionFailuresPercentForBan; 10; ; - - -config-pt.properties -partialtransactions -cacheMaxResponseSize; 5MB -cacheMaxSize; 20MB - - -config-task.properties -logging task -startDelay; 1m -repeatDelay; 10m - -connect peers task for service Finalization -startDelay; 2s -repeatDelay; 1m - -finalization task -startDelay; 2m -repeatDelay; 15s - -pull finalization messages task -startDelay; 3s -repeatDelay; 1s - -pull finalization proof task -startDelay; 10s -repeatDelay; 50s - -harvesting task -startDelay; 30s -repeatDelay; 1s - -network chain height detection -startDelay; 1s -repeatDelay; 15s - -node discovery peers task -startDelay; 1m -minDelay; 1m -maxDelay; 10m -numPhaseOneRounds; 10 -numTransitionRounds; 20 - -node discovery ping task -startDelay; 2m -repeatDelay; 5m - -age peers task for service Readers -startDelay; 1m -repeatDelay; 1m - -batch partial transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Pt -startDelay; 3s -repeatDelay; 1m - -pull partial transactions task -startDelay; 10s -repeatDelay; 3s - -batch transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Sync -startDelay; 1s -repeatDelay; 1m - -pull unconfirmed transactions task -startDelay; 4s -repeatDelay; 3s - -synchronizer task -startDelay; 3s -repeatDelay; 3s - -time synchronization task -startDelay; 1m -minDelay; 3m -maxDelay; 180m -numPhaseOneRounds; 5 -numTransitionRounds; 10 - -static node refresh task -startDelay; 5ms -minDelay; 15s -maxDelay; 24h -numPhaseOneRounds; 20 -numTransitionRounds; 20 - - -config-timesync.properties -timesynchronization -maxNodes; 20 -minImportance; 10'000'000'000 - - -config-user.properties -account -enableDelegatedHarvestersAutoDetection; true - -storage -seedDirectory; ./seed -certificateDirectory; ./cert -dataDirectory; ./data -pluginsDirectory; /usr/catapult/lib -votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/test/reports/testnet-dual-voting/node-config.rst b/test/reports/testnet-dual-voting/node-config.rst deleted file mode 100644 index e09011742..000000000 --- a/test/reports/testnet-dual-voting/node-config.rst +++ /dev/null @@ -1,888 +0,0 @@ -Symbol Bootstrap Version: CURRENT_VERSION - -config-database.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **database**; - databaseUri; mongodb://db:27017 - databaseName; catapult - maxWriterThreads; 8 - maxDropBatchSize; 10 - writeTimeout; 10m - **plugins**; - catapult.mongo.plugins.accountlink; true - catapult.mongo.plugins.aggregate; true - catapult.mongo.plugins.lockhash; true - catapult.mongo.plugins.locksecret; true - catapult.mongo.plugins.metadata; true - catapult.mongo.plugins.mosaic; true - catapult.mongo.plugins.multisig; true - catapult.mongo.plugins.namespace; true - catapult.mongo.plugins.restrictionaccount; true - catapult.mongo.plugins.restrictionmosaic; true - catapult.mongo.plugins.transfer; true - -config-extensions-broker.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; true - extension.mongo; true - extension.zeromq; true - extension.hashcache; true - -config-extensions-recovery.properties -===================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.filespooling; true - extension.hashcache; true - -config-extensions-server.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.filespooling; true - extension.partialtransaction; true - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.harvesting; true - extension.syncsource; true - extension.diagnostics; true - extension.finalization; true - extension.hashcache; true - extension.networkheight; false - extension.nodediscovery; true - extension.packetserver; true - extension.pluginhandlers; true - extension.sync; true - extension.timesync; true - extension.transactionsink; true - extension.unbondedpruning; true - -config-finalization.properties -============================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **finalization**; - enableVoting; true - enableRevoteOnBoot; false - size; 10'000 - threshold; 7'000 - stepDuration; 4m - shortLivedCacheMessageDuration; 10m - messageSynchronizationMaxResponseSize; 20MB - maxHashesPerPoint; 256 - prevoteBlocksMultiple; 4 - unfinalizedBlocksDuration; 0m - -config-harvesting.properties -============================ -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **harvesting**; ; ; - harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. - harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. - enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. - maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. - delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. - beneficiaryAddress; TDQ32MTJICEPJDU45KVN7BAM4A4GI7OARMLVSXQ; Address; Address of the account receiving part of the harvested fee. - -config-inflation.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **inflation**; - starting-at-height-2; 0 - starting-at-height-5760; 191997042 - starting-at-height-172799; 183764522 - starting-at-height-435299; 175884998 - starting-at-height-697799; 168343336 - starting-at-height-960299; 161125048 - starting-at-height-1222799; 154216270 - starting-at-height-1485299; 147603728 - starting-at-height-1747799; 141274720 - starting-at-height-2010299; 135217090 - starting-at-height-2272799; 129419202 - starting-at-height-2535299; 123869918 - starting-at-height-2797799; 118558578 - starting-at-height-3060299; 113474978 - starting-at-height-3322799; 108609356 - starting-at-height-3585299; 103952364 - starting-at-height-3847799; 99495056 - starting-at-height-4110299; 95228870 - starting-at-height-4372799; 91145612 - starting-at-height-4635299; 87237436 - starting-at-height-4897799; 83496838 - starting-at-height-5160299; 79916630 - starting-at-height-5422799; 76489934 - starting-at-height-5685299; 73210170 - starting-at-height-5947799; 70071038 - starting-at-height-6210299; 67066506 - starting-at-height-6472799; 64190804 - starting-at-height-6735299; 61438406 - starting-at-height-6997799; 58804028 - starting-at-height-7260299; 56282608 - starting-at-height-7522799; 53869300 - starting-at-height-7785299; 51559472 - starting-at-height-8047799; 49348686 - starting-at-height-8310299; 47232696 - starting-at-height-8572799; 45207434 - starting-at-height-8835299; 43269014 - starting-at-height-9097799; 41413708 - starting-at-height-9360299; 39637956 - starting-at-height-9622799; 37938346 - starting-at-height-9885299; 36311610 - starting-at-height-10147799; 34754628 - starting-at-height-10410299; 33264406 - starting-at-height-10672799; 31838082 - starting-at-height-10935299; 30472918 - starting-at-height-11197799; 29166288 - starting-at-height-11460299; 27915686 - starting-at-height-11722799; 26718706 - starting-at-height-11985299; 25573052 - starting-at-height-12247799; 24476520 - starting-at-height-12510299; 23427008 - starting-at-height-12772799; 22422496 - starting-at-height-13035299; 21461056 - starting-at-height-13297799; 20540840 - starting-at-height-13560299; 19660082 - starting-at-height-13822799; 18817090 - starting-at-height-14085299; 18010244 - starting-at-height-14347799; 17237994 - starting-at-height-14610299; 16498858 - starting-at-height-14872799; 15791412 - starting-at-height-15135299; 15114302 - starting-at-height-15397799; 14466226 - starting-at-height-15660299; 13845938 - starting-at-height-15922799; 13252246 - starting-at-height-16185299; 12684012 - starting-at-height-16447799; 12140142 - starting-at-height-16710299; 11619592 - starting-at-height-16972799; 11121364 - starting-at-height-17235299; 10644498 - starting-at-height-17497799; 10188078 - starting-at-height-17760299; 9751230 - starting-at-height-18022799; 9333114 - starting-at-height-18285299; 8932924 - starting-at-height-18547799; 8549896 - starting-at-height-18810299; 8183290 - starting-at-height-19072799; 7832404 - starting-at-height-19335299; 7496562 - starting-at-height-19597799; 7175122 - starting-at-height-19860299; 6867464 - starting-at-height-20122799; 6573000 - starting-at-height-20385299; 6291160 - starting-at-height-20647799; 6021404 - starting-at-height-20910299; 5763216 - starting-at-height-21172799; 5516100 - starting-at-height-21435299; 5279578 - starting-at-height-21697799; 5053198 - starting-at-height-21960299; 4836526 - starting-at-height-22222799; 4629144 - starting-at-height-22485299; 4430652 - starting-at-height-22747799; 4240674 - starting-at-height-23010299; 4058840 - starting-at-height-23272799; 3884804 - starting-at-height-23535299; 3718230 - starting-at-height-23797799; 3558798 - starting-at-height-24060299; 3406202 - starting-at-height-24322799; 3260150 - starting-at-height-24585299; 3120360 - starting-at-height-24847799; 2986564 - starting-at-height-25110299; 2858506 - starting-at-height-25372799; 2735938 - starting-at-height-25635299; 2618624 - starting-at-height-25897799; 2506342 - starting-at-height-26160299; 2398874 - starting-at-height-26422799; 2296014 - starting-at-height-26685299; 2197564 - starting-at-height-26947799; 2103336 - starting-at-height-27210299; 2013150 - starting-at-height-27472799; 1926828 - starting-at-height-27735299; 1844210 - starting-at-height-27997799; 1765132 - starting-at-height-28260299; 1689446 - starting-at-height-28522799; 1617006 - starting-at-height-28785299; 1547672 - starting-at-height-29047799; 1481310 - starting-at-height-29310299; 1417794 - starting-at-height-29572799; 1357000 - starting-at-height-29835299; 1298814 - starting-at-height-30097799; 1243124 - starting-at-height-30360299; 1189820 - starting-at-height-30622799; 1138802 - starting-at-height-30885299; 1089972 - starting-at-height-31147799; 1043236 - starting-at-height-31410299; 998504 - starting-at-height-31672799; 955690 - starting-at-height-31935299; 914712 - starting-at-height-32197799; 875490 - starting-at-height-32460299; 837950 - starting-at-height-32722799; 802020 - starting-at-height-32985299; 767630 - starting-at-height-33247799; 734716 - starting-at-height-33510299; 703212 - starting-at-height-33772799; 673060 - starting-at-height-34035299; 644200 - starting-at-height-34297799; 616578 - starting-at-height-34560299; 590140 - starting-at-height-34822799; 564836 - starting-at-height-35085299; 540616 - starting-at-height-35347799; 517436 - starting-at-height-35610299; 495248 - starting-at-height-35872799; 474014 - starting-at-height-36135299; 453688 - starting-at-height-36397799; 434234 - starting-at-height-36660299; 415616 - starting-at-height-36922799; 397794 - starting-at-height-37185299; 380738 - starting-at-height-37447799; 364412 - starting-at-height-37710299; 348786 - starting-at-height-37972799; 333832 - starting-at-height-38235299; 319518 - starting-at-height-38497799; 305816 - starting-at-height-38760299; 292704 - starting-at-height-39022799; 280154 - starting-at-height-39285299; 268140 - starting-at-height-39547799; 256644 - starting-at-height-39810299; 245638 - starting-at-height-40072799; 235106 - starting-at-height-40335299; 225026 - starting-at-height-40597799; 215376 - starting-at-height-40860299; 206142 - starting-at-height-41122799; 197302 - starting-at-height-41385299; 188842 - starting-at-height-41647799; 180744 - starting-at-height-41910299; 172994 - starting-at-height-42172799; 165578 - starting-at-height-42435299; 158478 - starting-at-height-42697799; 151682 - starting-at-height-42960299; 145178 - starting-at-height-43222799; 138954 - starting-at-height-43485299; 132994 - starting-at-height-43747799; 127292 - starting-at-height-44010299; 121834 - starting-at-height-44272799; 116610 - starting-at-height-44535299; 111610 - starting-at-height-44797799; 106824 - starting-at-height-45060299; 102244 - starting-at-height-45322799; 97860 - starting-at-height-45585299; 93664 - starting-at-height-45847799; 89648 - starting-at-height-46110299; 85804 - starting-at-height-46372799; 82124 - starting-at-height-46635299; 78602 - starting-at-height-46897799; 75232 - starting-at-height-47160299; 72006 - starting-at-height-47422799; 68920 - starting-at-height-47685299; 65964 - starting-at-height-47947799; 63136 - starting-at-height-48210299; 60428 - starting-at-height-48472799; 57838 - starting-at-height-48735299; 55358 - starting-at-height-48997799; 52984 - starting-at-height-49260299; 50712 - starting-at-height-49522799; 48538 - starting-at-height-49785299; 46456 - starting-at-height-50047799; 44464 - starting-at-height-50310299; 42558 - starting-at-height-50572799; 40732 - starting-at-height-50835299; 38986 - starting-at-height-51097799; 37314 - starting-at-height-51360299; 35714 - starting-at-height-51622799; 34182 - starting-at-height-51885299; 32716 - starting-at-height-52147799; 31314 - starting-at-height-52410299; 29972 - starting-at-height-52672799; 28686 - starting-at-height-52935299; 27456 - starting-at-height-53197799; 26278 - starting-at-height-53460299; 25152 - starting-at-height-53722799; 24074 - starting-at-height-53985299; 23042 - starting-at-height-54247799; 22054 - starting-at-height-54510299; 21108 - starting-at-height-54772799; 20202 - starting-at-height-55035299; 19336 - starting-at-height-55297799; 18506 - starting-at-height-55560299; 17714 - starting-at-height-55822799; 16954 - starting-at-height-56085299; 16226 - starting-at-height-56347799; 15532 - starting-at-height-56610299; 14866 - starting-at-height-56872799; 14228 - starting-at-height-57135299; 13618 - starting-at-height-57397799; 13034 - starting-at-height-57660299; 12474 - starting-at-height-57922799; 11940 - starting-at-height-58185299; 11428 - starting-at-height-58447799; 10938 - starting-at-height-58710299; 10468 - starting-at-height-58972799; 10020 - starting-at-height-59235299; 9590 - starting-at-height-59497799; 9178 - starting-at-height-59760299; 8786 - starting-at-height-60022799; 8408 - starting-at-height-60285299; 8048 - starting-at-height-60547799; 7702 - starting-at-height-60810299; 7372 - starting-at-height-61072799; 7056 - starting-at-height-61335299; 6754 - starting-at-height-61597799; 6464 - starting-at-height-61860299; 6186 - starting-at-height-62122799; 5922 - starting-at-height-62385299; 5668 - starting-at-height-62647799; 5424 - starting-at-height-62910299; 5192 - starting-at-height-63172799; 4970 - starting-at-height-63435299; 4756 - starting-at-height-63697799; 4552 - starting-at-height-63960299; 4356 - starting-at-height-64222799; 4170 - starting-at-height-64485299; 3992 - starting-at-height-64747799; 3820 - starting-at-height-65010299; 3656 - starting-at-height-65272799; 3500 - starting-at-height-65535299; 3350 - starting-at-height-65797799; 3206 - starting-at-height-66060299; 3068 - starting-at-height-66322799; 2936 - starting-at-height-66585299; 2810 - starting-at-height-66847799; 2690 - starting-at-height-67110299; 2574 - starting-at-height-67372799; 2464 - starting-at-height-67635299; 2358 - starting-at-height-67897799; 2258 - starting-at-height-68160299; 2160 - starting-at-height-68422799; 2068 - starting-at-height-68685299; 1980 - starting-at-height-68947799; 1894 - starting-at-height-69210299; 1812 - starting-at-height-69472799; 1736 - starting-at-height-69735299; 1660 - starting-at-height-69997799; 1590 - starting-at-height-70260299; 1522 - starting-at-height-70522799; 1456 - starting-at-height-70785299; 1394 - starting-at-height-71047799; 1334 - starting-at-height-71310299; 1276 - starting-at-height-71572799; 1222 - starting-at-height-71835299; 1170 - starting-at-height-72097799; 1120 - starting-at-height-72360299; 1072 - starting-at-height-72622799; 1026 - starting-at-height-72885299; 982 - starting-at-height-73147799; 938 - starting-at-height-73410299; 898 - starting-at-height-73672799; 860 - starting-at-height-73935299; 824 - starting-at-height-74197799; 788 - starting-at-height-74460299; 754 - starting-at-height-74722799; 722 - starting-at-height-74985299; 690 - starting-at-height-75247799; 662 - starting-at-height-75510299; 632 - starting-at-height-75772799; 606 - starting-at-height-76035299; 580 - starting-at-height-76297799; 554 - starting-at-height-76560299; 530 - starting-at-height-76822799; 508 - starting-at-height-77085299; 486 - starting-at-height-77347799; 466 - starting-at-height-77610299; 446 - starting-at-height-77872799; 426 - starting-at-height-78135299; 408 - starting-at-height-78397799; 390 - starting-at-height-78660299; 374 - starting-at-height-78922799; 358 - starting-at-height-79185299; 342 - starting-at-height-79447799; 328 - starting-at-height-79710299; 314 - starting-at-height-79972799; 300 - starting-at-height-80235299; 286 - starting-at-height-80497799; 274 - starting-at-height-80760299; 262 - starting-at-height-81022799; 252 - starting-at-height-81285299; 240 - starting-at-height-81547799; 230 - starting-at-height-81810299; 220 - starting-at-height-82072799; 210 - starting-at-height-82335299; 202 - starting-at-height-82597799; 194 - starting-at-height-82860299; 184 - starting-at-height-83122799; 176 - starting-at-height-83385299; 170 - starting-at-height-83647799; 162 - starting-at-height-83910299; 154 - starting-at-height-84172799; 148 - starting-at-height-84435299; 142 - starting-at-height-84697799; 136 - starting-at-height-84960299; 130 - starting-at-height-85222799; 124 - starting-at-height-85485299; 118 - starting-at-height-85747799; 114 - starting-at-height-86010299; 108 - starting-at-height-86272799; 104 - starting-at-height-86535299; 100 - starting-at-height-86797799; 96 - starting-at-height-87060299; 92 - starting-at-height-87322799; 88 - starting-at-height-87585299; 84 - starting-at-height-87847799; 80 - starting-at-height-88110299; 76 - starting-at-height-88372799; 72 - starting-at-height-88635299; 70 - starting-at-height-88897799; 66 - starting-at-height-89160299; 64 - starting-at-height-89422799; 62 - starting-at-height-89685299; 58 - starting-at-height-89947799; 56 - starting-at-height-90210299; 54 - starting-at-height-90472799; 52 - starting-at-height-90735299; 48 - starting-at-height-90997799; 46 - starting-at-height-91260299; 44 - starting-at-height-91522799; 42 - starting-at-height-91785299; 40 - starting-at-height-92047799; 40 - starting-at-height-92310299; 38 - starting-at-height-92572799; 36 - starting-at-height-92835299; 34 - starting-at-height-93097799; 32 - starting-at-height-93360299; 32 - starting-at-height-93622799; 30 - starting-at-height-93885299; 28 - starting-at-height-94147799; 28 - starting-at-height-94410299; 26 - starting-at-height-94672799; 24 - starting-at-height-94935299; 24 - starting-at-height-95197799; 22 - starting-at-height-95460299; 22 - starting-at-height-95722799; 20 - starting-at-height-95985299; 20 - starting-at-height-96247799; 18 - starting-at-height-96510299; 18 - starting-at-height-96772799; 18 - starting-at-height-97035299; 16 - starting-at-height-97297799; 16 - starting-at-height-97560299; 14 - starting-at-height-97822799; 14 - starting-at-height-98085299; 14 - starting-at-height-98347799; 12 - starting-at-height-98610299; 12 - starting-at-height-98872799; 12 - starting-at-height-99135299; 12 - starting-at-height-99397799; 10 - starting-at-height-99660299; 10 - starting-at-height-99922799; 10 - starting-at-height-100185299; 10 - starting-at-height-100447799; 8 - starting-at-height-100710299; 8 - starting-at-height-100972799; 8 - starting-at-height-101235299; 8 - starting-at-height-101497799; 8 - starting-at-height-101760299; 6 - starting-at-height-102022799; 6 - starting-at-height-102285299; 6 - starting-at-height-102547799; 6 - starting-at-height-102810299; 6 - starting-at-height-103072799; 6 - starting-at-height-103335299; 6 - starting-at-height-103597799; 4 - starting-at-height-103860299; 4 - starting-at-height-104122799; 4 - starting-at-height-104385299; 4 - starting-at-height-104647799; 4 - starting-at-height-104910299; 4 - starting-at-height-105172799; 4 - starting-at-height-105435299; 4 - starting-at-height-105697799; 4 - starting-at-height-105960299; 2 - starting-at-height-106222799; 2 - starting-at-height-106485299; 2 - starting-at-height-106747799; 2 - starting-at-height-107010299; 2 - starting-at-height-107272799; 2 - starting-at-height-107535299; 2 - starting-at-height-107797799; 2 - starting-at-height-108060299; 2 - starting-at-height-108322799; 2 - starting-at-height-108585299; 2 - starting-at-height-108847799; 2 - starting-at-height-109110299; 2 - starting-at-height-109372799; 2 - starting-at-height-109635299; 2 - starting-at-height-109897799; 2 - starting-at-height-110160299; 1 - starting-at-height-110422799; 0 - -config-logging-broker.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_broker%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-recovery.properties -================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_recovery%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-server.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_server%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-messaging.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **messaging**; - subscriberPort; 7902 - listenInterface; 0.0.0.0 - -config-network.properties -========================= -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **network**; ; ; - identifier; public-test; NetworkIdentifier; Network identifier. - nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. - nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. - generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; - epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. - **chain**; ; ; - enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. - enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. - currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. - harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. - blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. - blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. - importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. - importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. - maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. - maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. - defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. - maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. - maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. - initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. - maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. - totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. - minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. - votingSetGrouping; 720; ; - maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. - minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. - maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. - harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. - harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. - harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. - maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - **plugin:catapult.plugins.accountlink**; - dummy; to trigger plugin load - **plugin:catapult.plugins.aggregate**; ; ; - maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. - maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. - enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. - enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. - maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - **plugin:catapult.plugins.lockhash**; ; ; - lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. - maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - **plugin:catapult.plugins.locksecret**; ; ; - maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. - minProofSize; 0; uint16_t; Minimum size of a proof in bytes. - maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - **plugin:catapult.plugins.metadata**; ; ; - maxValueSize; 1024; uint16_t; Maximum metadata value size. - **plugin:catapult.plugins.mosaic**; ; ; - maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. - maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. - maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. - mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. - mosaicRentalFee; 500000; Amount; Mosaic rental fee. - **plugin:catapult.plugins.multisig**; ; ; - maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. - maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. - maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - **plugin:catapult.plugins.namespace**; ; ; - maxNameSize; 64; uint8_t; Maximum namespace name size. - maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. - maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. - minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. - maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. - namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. - reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. - namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. - rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. - childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - **plugin:catapult.plugins.restrictionaccount**; ; ; - maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - **plugin:catapult.plugins.restrictionmosaic**; ; ; - maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - **plugin:catapult.plugins.transfer**; ; ; - maxMessageSize; 1024; uint16_t; Maximum transaction message size. - -config-node.properties -====================== -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **node**; ; ; - port; 7900; unsigned short; Server port. - maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. - enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. - enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. - enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. - enableAutoSyncCleanup; false; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. - fileDatabaseBatchSize; 100; ; - enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. - transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. - maxHashesPerSyncAttempt; 370; ; - maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. - maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. - shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. - shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. - shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. - shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. - minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. - maxTimeBehindPullTransactionsStart; 5m; ; - transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. - unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. - unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. - connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. - syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. - socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). - socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. - maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. - blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. - blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. - blockDisruptorMaxMemorySize; 300MB; ; - transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. - transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. - transactionDisruptorMaxMemorySize; 20MB; ; - enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. - enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. - maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. - minPartnerNodeVersion; 1.0.0.0; ; - maxPartnerNodeVersion; 1.0.255.255; ; - trustedHosts; 127.0.0.1, 172.20.0.25; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. - localNetworks; 127.0.0.1, 172.20.0.25; unordered_set; Networks that should be treated as local. - listenInterface; 0.0.0.0; ; - **cache_database**; - enableStatistics; false - maxOpenFiles; 0 - maxBackgroundThreads; 0 - maxSubcompactionThreads; 0 - blockCacheSize; 0MB - memtableMemoryBudget; 0MB - maxWriteBatchSize; 5MB - **localnode**; ; ; - host; ; string; Node host (leave empty to auto-detect IP). - friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). - version; 1.0.1.0; uint32_t; Node version. - roles; Peer,Api,Voting; ionet::NodeRoles; Node roles. - **outgoing_connections**; ; ; - maxConnections; 10; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - **incoming_connections**; ; ; - maxConnections; 512; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - **banning**; ; ; - defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. - maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. - keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. - maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. - numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). - readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. - maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. - minTransactionFailuresCountForBan; 8; ; - minTransactionFailuresPercentForBan; 10; ; - -config-pt.properties -==================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **partialtransactions**; - cacheMaxResponseSize; 5MB - cacheMaxSize; 20MB - -config-task.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **logging task**; - startDelay; 1m - repeatDelay; 10m - **connect peers task for service Finalization**; - startDelay; 2s - repeatDelay; 1m - **finalization task**; - startDelay; 2m - repeatDelay; 15s - **pull finalization messages task**; - startDelay; 3s - repeatDelay; 1s - **pull finalization proof task**; - startDelay; 10s - repeatDelay; 50s - **harvesting task**; - startDelay; 30s - repeatDelay; 1s - **network chain height detection**; - startDelay; 1s - repeatDelay; 15s - **node discovery peers task**; - startDelay; 1m - minDelay; 1m - maxDelay; 10m - numPhaseOneRounds; 10 - numTransitionRounds; 20 - **node discovery ping task**; - startDelay; 2m - repeatDelay; 5m - **age peers task for service Readers**; - startDelay; 1m - repeatDelay; 1m - **batch partial transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Pt**; - startDelay; 3s - repeatDelay; 1m - **pull partial transactions task**; - startDelay; 10s - repeatDelay; 3s - **batch transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Sync**; - startDelay; 1s - repeatDelay; 1m - **pull unconfirmed transactions task**; - startDelay; 4s - repeatDelay; 3s - **synchronizer task**; - startDelay; 3s - repeatDelay; 3s - **time synchronization task**; - startDelay; 1m - minDelay; 3m - maxDelay; 180m - numPhaseOneRounds; 5 - numTransitionRounds; 10 - **static node refresh task**; - startDelay; 5ms - minDelay; 15s - maxDelay; 24h - numPhaseOneRounds; 20 - numTransitionRounds; 20 - -config-timesync.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **timesynchronization**; - maxNodes; 20 - minImportance; 10'000'000'000 - -config-user.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **account**; - enableDelegatedHarvestersAutoDetection; true - **storage**; - seedDirectory; ./seed - certificateDirectory; ./cert - dataDirectory; ./data - pluginsDirectory; /usr/catapult/lib - votingKeysDirectory; ./votingkeys diff --git a/test/reports/testnet-dual-voting/rest-gateway-rest.json b/test/reports/testnet-dual-voting/rest-gateway-rest.json deleted file mode 100644 index 8cbda7298..000000000 --- a/test/reports/testnet-dual-voting/rest-gateway-rest.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "network": { - "name": "publicTest", - "description": "catapult public test network" - }, - "port": 3000, - "crossDomain": { - "allowedHosts": [ - "*" - ], - "allowedMethods": [ - "GET", - "POST", - "PUT", - "OPTIONS" - ] - }, - "extensions": [ - "accountLink", - "aggregate", - "lockHash", - "lockSecret", - "mosaic", - "metadata", - "multisig", - "namespace", - "receipts", - "restrictions", - "transfer", - "cmc" - ], - "db": { - "url": "mongodb://db:27017/", - "name": "catapult", - "pageSizeMin": 10, - "pageSizeMax": 100, - "maxConnectionAttempts": 15, - "baseRetryDelay": 750, - "connectionPoolSize": 10 - }, - "apiNode": { - "host": "node", - "port": 7900, - "tlsClientCertificatePath": "/symbol-workdir/api-node-config/cert/node.crt.pem", - "tlsClientKeyPath": "/symbol-workdir/api-node-config/cert/node.key.pem", - "tlsCaCertificatePath": "/symbol-workdir/api-node-config/cert/ca.cert.pem", - "timeout": 1000, - "networkPropertyFilePath": "/symbol-workdir/api-node-config/config-network.properties", - "nodePropertyFilePath": "/symbol-workdir/api-node-config/config-node.properties" - }, - "websocket": { - "mq": { - "host": "broker", - "port": 7902, - "monitorInterval": 500, - "connectTimeout": 10000, - "monitorLoggingThrottle": 60000, - "maxSubscriptions": 300 - }, - "allowOptionalAddress": true - }, - "throttling": { - "burst": 80, - "rate": 60 - }, - "logging": { - "console": { - "formats": [ - "colorize", - "simple" - ], - "level": "verbose", - "handleExceptions": true - }, - "file": { - "formats": [ - "prettyPrint" - ], - "level": "verbose", - "handleExceptions": true, - "filename": "/symbol-workdir/logs/catapult-rest.log", - "maxsize": 20971520, - "maxFiles": 100 - } - }, - "numBlocksTransactionFeeStats": 300, - "deployment": { - "deploymentTool": "symbol-bootstrap", - "deploymentToolVersion": "abc", - "lastUpdatedDate": "2021-05-22" - } -} diff --git a/test/reports/testnet-peer-non-harvesting-voting/node-config.csv b/test/reports/testnet-peer-non-harvesting-voting/node-config.csv deleted file mode 100644 index 6c2ff4672..000000000 --- a/test/reports/testnet-peer-non-harvesting-voting/node-config.csv +++ /dev/null @@ -1,855 +0,0 @@ -symbol-bootstrap-version; CURRENT_VERSION - -config-database.properties -database -databaseUri; mongodb://:27017 -databaseName; catapult -maxWriterThreads; 8 -maxDropBatchSize; 10 -writeTimeout; 10m - -plugins -catapult.mongo.plugins.accountlink; true -catapult.mongo.plugins.aggregate; true -catapult.mongo.plugins.lockhash; true -catapult.mongo.plugins.locksecret; true -catapult.mongo.plugins.metadata; true -catapult.mongo.plugins.mosaic; true -catapult.mongo.plugins.multisig; true -catapult.mongo.plugins.namespace; true -catapult.mongo.plugins.restrictionaccount; true -catapult.mongo.plugins.restrictionmosaic; true -catapult.mongo.plugins.transfer; true - - -config-extensions-broker.properties -extensions -extension.addressextraction; true -extension.mongo; true -extension.zeromq; true -extension.hashcache; true - - -config-extensions-recovery.properties -extensions -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.filespooling; true -extension.hashcache; true - - -config-extensions-server.properties -extensions -extension.filespooling; false -extension.partialtransaction; false -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.harvesting; false -extension.syncsource; true -extension.diagnostics; true -extension.finalization; true -extension.hashcache; true -extension.networkheight; false -extension.nodediscovery; true -extension.packetserver; true -extension.pluginhandlers; true -extension.sync; true -extension.timesync; true -extension.transactionsink; true -extension.unbondedpruning; true - - -config-finalization.properties -finalization -enableVoting; true -enableRevoteOnBoot; false -size; 10'000 -threshold; 7'000 -stepDuration; 4m -shortLivedCacheMessageDuration; 10m -messageSynchronizationMaxResponseSize; 20MB -maxHashesPerPoint; 256 -prevoteBlocksMultiple; 4 -unfinalizedBlocksDuration; 0m - - -config-inflation.properties -inflation -starting-at-height-2; 0 -starting-at-height-5760; 191997042 -starting-at-height-172799; 183764522 -starting-at-height-435299; 175884998 -starting-at-height-697799; 168343336 -starting-at-height-960299; 161125048 -starting-at-height-1222799; 154216270 -starting-at-height-1485299; 147603728 -starting-at-height-1747799; 141274720 -starting-at-height-2010299; 135217090 -starting-at-height-2272799; 129419202 -starting-at-height-2535299; 123869918 -starting-at-height-2797799; 118558578 -starting-at-height-3060299; 113474978 -starting-at-height-3322799; 108609356 -starting-at-height-3585299; 103952364 -starting-at-height-3847799; 99495056 -starting-at-height-4110299; 95228870 -starting-at-height-4372799; 91145612 -starting-at-height-4635299; 87237436 -starting-at-height-4897799; 83496838 -starting-at-height-5160299; 79916630 -starting-at-height-5422799; 76489934 -starting-at-height-5685299; 73210170 -starting-at-height-5947799; 70071038 -starting-at-height-6210299; 67066506 -starting-at-height-6472799; 64190804 -starting-at-height-6735299; 61438406 -starting-at-height-6997799; 58804028 -starting-at-height-7260299; 56282608 -starting-at-height-7522799; 53869300 -starting-at-height-7785299; 51559472 -starting-at-height-8047799; 49348686 -starting-at-height-8310299; 47232696 -starting-at-height-8572799; 45207434 -starting-at-height-8835299; 43269014 -starting-at-height-9097799; 41413708 -starting-at-height-9360299; 39637956 -starting-at-height-9622799; 37938346 -starting-at-height-9885299; 36311610 -starting-at-height-10147799; 34754628 -starting-at-height-10410299; 33264406 -starting-at-height-10672799; 31838082 -starting-at-height-10935299; 30472918 -starting-at-height-11197799; 29166288 -starting-at-height-11460299; 27915686 -starting-at-height-11722799; 26718706 -starting-at-height-11985299; 25573052 -starting-at-height-12247799; 24476520 -starting-at-height-12510299; 23427008 -starting-at-height-12772799; 22422496 -starting-at-height-13035299; 21461056 -starting-at-height-13297799; 20540840 -starting-at-height-13560299; 19660082 -starting-at-height-13822799; 18817090 -starting-at-height-14085299; 18010244 -starting-at-height-14347799; 17237994 -starting-at-height-14610299; 16498858 -starting-at-height-14872799; 15791412 -starting-at-height-15135299; 15114302 -starting-at-height-15397799; 14466226 -starting-at-height-15660299; 13845938 -starting-at-height-15922799; 13252246 -starting-at-height-16185299; 12684012 -starting-at-height-16447799; 12140142 -starting-at-height-16710299; 11619592 -starting-at-height-16972799; 11121364 -starting-at-height-17235299; 10644498 -starting-at-height-17497799; 10188078 -starting-at-height-17760299; 9751230 -starting-at-height-18022799; 9333114 -starting-at-height-18285299; 8932924 -starting-at-height-18547799; 8549896 -starting-at-height-18810299; 8183290 -starting-at-height-19072799; 7832404 -starting-at-height-19335299; 7496562 -starting-at-height-19597799; 7175122 -starting-at-height-19860299; 6867464 -starting-at-height-20122799; 6573000 -starting-at-height-20385299; 6291160 -starting-at-height-20647799; 6021404 -starting-at-height-20910299; 5763216 -starting-at-height-21172799; 5516100 -starting-at-height-21435299; 5279578 -starting-at-height-21697799; 5053198 -starting-at-height-21960299; 4836526 -starting-at-height-22222799; 4629144 -starting-at-height-22485299; 4430652 -starting-at-height-22747799; 4240674 -starting-at-height-23010299; 4058840 -starting-at-height-23272799; 3884804 -starting-at-height-23535299; 3718230 -starting-at-height-23797799; 3558798 -starting-at-height-24060299; 3406202 -starting-at-height-24322799; 3260150 -starting-at-height-24585299; 3120360 -starting-at-height-24847799; 2986564 -starting-at-height-25110299; 2858506 -starting-at-height-25372799; 2735938 -starting-at-height-25635299; 2618624 -starting-at-height-25897799; 2506342 -starting-at-height-26160299; 2398874 -starting-at-height-26422799; 2296014 -starting-at-height-26685299; 2197564 -starting-at-height-26947799; 2103336 -starting-at-height-27210299; 2013150 -starting-at-height-27472799; 1926828 -starting-at-height-27735299; 1844210 -starting-at-height-27997799; 1765132 -starting-at-height-28260299; 1689446 -starting-at-height-28522799; 1617006 -starting-at-height-28785299; 1547672 -starting-at-height-29047799; 1481310 -starting-at-height-29310299; 1417794 -starting-at-height-29572799; 1357000 -starting-at-height-29835299; 1298814 -starting-at-height-30097799; 1243124 -starting-at-height-30360299; 1189820 -starting-at-height-30622799; 1138802 -starting-at-height-30885299; 1089972 -starting-at-height-31147799; 1043236 -starting-at-height-31410299; 998504 -starting-at-height-31672799; 955690 -starting-at-height-31935299; 914712 -starting-at-height-32197799; 875490 -starting-at-height-32460299; 837950 -starting-at-height-32722799; 802020 -starting-at-height-32985299; 767630 -starting-at-height-33247799; 734716 -starting-at-height-33510299; 703212 -starting-at-height-33772799; 673060 -starting-at-height-34035299; 644200 -starting-at-height-34297799; 616578 -starting-at-height-34560299; 590140 -starting-at-height-34822799; 564836 -starting-at-height-35085299; 540616 -starting-at-height-35347799; 517436 -starting-at-height-35610299; 495248 -starting-at-height-35872799; 474014 -starting-at-height-36135299; 453688 -starting-at-height-36397799; 434234 -starting-at-height-36660299; 415616 -starting-at-height-36922799; 397794 -starting-at-height-37185299; 380738 -starting-at-height-37447799; 364412 -starting-at-height-37710299; 348786 -starting-at-height-37972799; 333832 -starting-at-height-38235299; 319518 -starting-at-height-38497799; 305816 -starting-at-height-38760299; 292704 -starting-at-height-39022799; 280154 -starting-at-height-39285299; 268140 -starting-at-height-39547799; 256644 -starting-at-height-39810299; 245638 -starting-at-height-40072799; 235106 -starting-at-height-40335299; 225026 -starting-at-height-40597799; 215376 -starting-at-height-40860299; 206142 -starting-at-height-41122799; 197302 -starting-at-height-41385299; 188842 -starting-at-height-41647799; 180744 -starting-at-height-41910299; 172994 -starting-at-height-42172799; 165578 -starting-at-height-42435299; 158478 -starting-at-height-42697799; 151682 -starting-at-height-42960299; 145178 -starting-at-height-43222799; 138954 -starting-at-height-43485299; 132994 -starting-at-height-43747799; 127292 -starting-at-height-44010299; 121834 -starting-at-height-44272799; 116610 -starting-at-height-44535299; 111610 -starting-at-height-44797799; 106824 -starting-at-height-45060299; 102244 -starting-at-height-45322799; 97860 -starting-at-height-45585299; 93664 -starting-at-height-45847799; 89648 -starting-at-height-46110299; 85804 -starting-at-height-46372799; 82124 -starting-at-height-46635299; 78602 -starting-at-height-46897799; 75232 -starting-at-height-47160299; 72006 -starting-at-height-47422799; 68920 -starting-at-height-47685299; 65964 -starting-at-height-47947799; 63136 -starting-at-height-48210299; 60428 -starting-at-height-48472799; 57838 -starting-at-height-48735299; 55358 -starting-at-height-48997799; 52984 -starting-at-height-49260299; 50712 -starting-at-height-49522799; 48538 -starting-at-height-49785299; 46456 -starting-at-height-50047799; 44464 -starting-at-height-50310299; 42558 -starting-at-height-50572799; 40732 -starting-at-height-50835299; 38986 -starting-at-height-51097799; 37314 -starting-at-height-51360299; 35714 -starting-at-height-51622799; 34182 -starting-at-height-51885299; 32716 -starting-at-height-52147799; 31314 -starting-at-height-52410299; 29972 -starting-at-height-52672799; 28686 -starting-at-height-52935299; 27456 -starting-at-height-53197799; 26278 -starting-at-height-53460299; 25152 -starting-at-height-53722799; 24074 -starting-at-height-53985299; 23042 -starting-at-height-54247799; 22054 -starting-at-height-54510299; 21108 -starting-at-height-54772799; 20202 -starting-at-height-55035299; 19336 -starting-at-height-55297799; 18506 -starting-at-height-55560299; 17714 -starting-at-height-55822799; 16954 -starting-at-height-56085299; 16226 -starting-at-height-56347799; 15532 -starting-at-height-56610299; 14866 -starting-at-height-56872799; 14228 -starting-at-height-57135299; 13618 -starting-at-height-57397799; 13034 -starting-at-height-57660299; 12474 -starting-at-height-57922799; 11940 -starting-at-height-58185299; 11428 -starting-at-height-58447799; 10938 -starting-at-height-58710299; 10468 -starting-at-height-58972799; 10020 -starting-at-height-59235299; 9590 -starting-at-height-59497799; 9178 -starting-at-height-59760299; 8786 -starting-at-height-60022799; 8408 -starting-at-height-60285299; 8048 -starting-at-height-60547799; 7702 -starting-at-height-60810299; 7372 -starting-at-height-61072799; 7056 -starting-at-height-61335299; 6754 -starting-at-height-61597799; 6464 -starting-at-height-61860299; 6186 -starting-at-height-62122799; 5922 -starting-at-height-62385299; 5668 -starting-at-height-62647799; 5424 -starting-at-height-62910299; 5192 -starting-at-height-63172799; 4970 -starting-at-height-63435299; 4756 -starting-at-height-63697799; 4552 -starting-at-height-63960299; 4356 -starting-at-height-64222799; 4170 -starting-at-height-64485299; 3992 -starting-at-height-64747799; 3820 -starting-at-height-65010299; 3656 -starting-at-height-65272799; 3500 -starting-at-height-65535299; 3350 -starting-at-height-65797799; 3206 -starting-at-height-66060299; 3068 -starting-at-height-66322799; 2936 -starting-at-height-66585299; 2810 -starting-at-height-66847799; 2690 -starting-at-height-67110299; 2574 -starting-at-height-67372799; 2464 -starting-at-height-67635299; 2358 -starting-at-height-67897799; 2258 -starting-at-height-68160299; 2160 -starting-at-height-68422799; 2068 -starting-at-height-68685299; 1980 -starting-at-height-68947799; 1894 -starting-at-height-69210299; 1812 -starting-at-height-69472799; 1736 -starting-at-height-69735299; 1660 -starting-at-height-69997799; 1590 -starting-at-height-70260299; 1522 -starting-at-height-70522799; 1456 -starting-at-height-70785299; 1394 -starting-at-height-71047799; 1334 -starting-at-height-71310299; 1276 -starting-at-height-71572799; 1222 -starting-at-height-71835299; 1170 -starting-at-height-72097799; 1120 -starting-at-height-72360299; 1072 -starting-at-height-72622799; 1026 -starting-at-height-72885299; 982 -starting-at-height-73147799; 938 -starting-at-height-73410299; 898 -starting-at-height-73672799; 860 -starting-at-height-73935299; 824 -starting-at-height-74197799; 788 -starting-at-height-74460299; 754 -starting-at-height-74722799; 722 -starting-at-height-74985299; 690 -starting-at-height-75247799; 662 -starting-at-height-75510299; 632 -starting-at-height-75772799; 606 -starting-at-height-76035299; 580 -starting-at-height-76297799; 554 -starting-at-height-76560299; 530 -starting-at-height-76822799; 508 -starting-at-height-77085299; 486 -starting-at-height-77347799; 466 -starting-at-height-77610299; 446 -starting-at-height-77872799; 426 -starting-at-height-78135299; 408 -starting-at-height-78397799; 390 -starting-at-height-78660299; 374 -starting-at-height-78922799; 358 -starting-at-height-79185299; 342 -starting-at-height-79447799; 328 -starting-at-height-79710299; 314 -starting-at-height-79972799; 300 -starting-at-height-80235299; 286 -starting-at-height-80497799; 274 -starting-at-height-80760299; 262 -starting-at-height-81022799; 252 -starting-at-height-81285299; 240 -starting-at-height-81547799; 230 -starting-at-height-81810299; 220 -starting-at-height-82072799; 210 -starting-at-height-82335299; 202 -starting-at-height-82597799; 194 -starting-at-height-82860299; 184 -starting-at-height-83122799; 176 -starting-at-height-83385299; 170 -starting-at-height-83647799; 162 -starting-at-height-83910299; 154 -starting-at-height-84172799; 148 -starting-at-height-84435299; 142 -starting-at-height-84697799; 136 -starting-at-height-84960299; 130 -starting-at-height-85222799; 124 -starting-at-height-85485299; 118 -starting-at-height-85747799; 114 -starting-at-height-86010299; 108 -starting-at-height-86272799; 104 -starting-at-height-86535299; 100 -starting-at-height-86797799; 96 -starting-at-height-87060299; 92 -starting-at-height-87322799; 88 -starting-at-height-87585299; 84 -starting-at-height-87847799; 80 -starting-at-height-88110299; 76 -starting-at-height-88372799; 72 -starting-at-height-88635299; 70 -starting-at-height-88897799; 66 -starting-at-height-89160299; 64 -starting-at-height-89422799; 62 -starting-at-height-89685299; 58 -starting-at-height-89947799; 56 -starting-at-height-90210299; 54 -starting-at-height-90472799; 52 -starting-at-height-90735299; 48 -starting-at-height-90997799; 46 -starting-at-height-91260299; 44 -starting-at-height-91522799; 42 -starting-at-height-91785299; 40 -starting-at-height-92047799; 40 -starting-at-height-92310299; 38 -starting-at-height-92572799; 36 -starting-at-height-92835299; 34 -starting-at-height-93097799; 32 -starting-at-height-93360299; 32 -starting-at-height-93622799; 30 -starting-at-height-93885299; 28 -starting-at-height-94147799; 28 -starting-at-height-94410299; 26 -starting-at-height-94672799; 24 -starting-at-height-94935299; 24 -starting-at-height-95197799; 22 -starting-at-height-95460299; 22 -starting-at-height-95722799; 20 -starting-at-height-95985299; 20 -starting-at-height-96247799; 18 -starting-at-height-96510299; 18 -starting-at-height-96772799; 18 -starting-at-height-97035299; 16 -starting-at-height-97297799; 16 -starting-at-height-97560299; 14 -starting-at-height-97822799; 14 -starting-at-height-98085299; 14 -starting-at-height-98347799; 12 -starting-at-height-98610299; 12 -starting-at-height-98872799; 12 -starting-at-height-99135299; 12 -starting-at-height-99397799; 10 -starting-at-height-99660299; 10 -starting-at-height-99922799; 10 -starting-at-height-100185299; 10 -starting-at-height-100447799; 8 -starting-at-height-100710299; 8 -starting-at-height-100972799; 8 -starting-at-height-101235299; 8 -starting-at-height-101497799; 8 -starting-at-height-101760299; 6 -starting-at-height-102022799; 6 -starting-at-height-102285299; 6 -starting-at-height-102547799; 6 -starting-at-height-102810299; 6 -starting-at-height-103072799; 6 -starting-at-height-103335299; 6 -starting-at-height-103597799; 4 -starting-at-height-103860299; 4 -starting-at-height-104122799; 4 -starting-at-height-104385299; 4 -starting-at-height-104647799; 4 -starting-at-height-104910299; 4 -starting-at-height-105172799; 4 -starting-at-height-105435299; 4 -starting-at-height-105697799; 4 -starting-at-height-105960299; 2 -starting-at-height-106222799; 2 -starting-at-height-106485299; 2 -starting-at-height-106747799; 2 -starting-at-height-107010299; 2 -starting-at-height-107272799; 2 -starting-at-height-107535299; 2 -starting-at-height-107797799; 2 -starting-at-height-108060299; 2 -starting-at-height-108322799; 2 -starting-at-height-108585299; 2 -starting-at-height-108847799; 2 -starting-at-height-109110299; 2 -starting-at-height-109372799; 2 -starting-at-height-109635299; 2 -starting-at-height-109897799; 2 -starting-at-height-110160299; 1 -starting-at-height-110422799; 0 - - -config-logging-broker.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_broker%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-recovery.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_recovery%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-server.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_server%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-messaging.properties -messaging -subscriberPort; 7902 -listenInterface; 0.0.0.0 - - -config-network.properties -network -identifier; public-test; NetworkIdentifier; Network identifier. -nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. -nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. -generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; -epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. - -chain -enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. -enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. -currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. -harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. -blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. -blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. -importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. -importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. -maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. -maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. -defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. -maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. -maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. -initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. -maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. -totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. -minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. -votingSetGrouping; 720; ; -maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. -minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. -maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. -harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. -harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. -harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. -maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - -plugin:catapult.plugins.accountlink -dummy; to trigger plugin load - -plugin:catapult.plugins.aggregate -maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. -maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. -enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. -enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. -maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - -plugin:catapult.plugins.lockhash -lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. -maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - -plugin:catapult.plugins.locksecret -maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. -minProofSize; 0; uint16_t; Minimum size of a proof in bytes. -maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - -plugin:catapult.plugins.metadata -maxValueSize; 1024; uint16_t; Maximum metadata value size. - -plugin:catapult.plugins.mosaic -maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. -maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. -maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. -mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. -mosaicRentalFee; 500000; Amount; Mosaic rental fee. - -plugin:catapult.plugins.multisig -maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. -maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. -maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - -plugin:catapult.plugins.namespace -maxNameSize; 64; uint8_t; Maximum namespace name size. -maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. -maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. -minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. -maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. -namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. -reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. -namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. -rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. -childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - -plugin:catapult.plugins.restrictionaccount -maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - -plugin:catapult.plugins.restrictionmosaic -maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - -plugin:catapult.plugins.transfer -maxMessageSize; 1024; uint16_t; Maximum transaction message size. - - -config-node.properties -node -port; 7900; unsigned short; Server port. -maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. -enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. -enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. -enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. -enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. -fileDatabaseBatchSize; 100; ; -enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. -transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. -maxHashesPerSyncAttempt; 370; ; -maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. -maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. -shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. -shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. -shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. -shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. -minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. -maxTimeBehindPullTransactionsStart; 5m; ; -transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. -unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. -unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. -connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. -syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. -socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). -socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. -maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. -blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. -blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. -blockDisruptorMaxMemorySize; 300MB; ; -transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. -transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. -transactionDisruptorMaxMemorySize; 20MB; ; -enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. -enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. -maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. -minPartnerNodeVersion; 1.0.0.0; ; -maxPartnerNodeVersion; 1.0.255.255; ; -trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. -localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. -listenInterface; 0.0.0.0; ; - -cache_database -enableStatistics; false -maxOpenFiles; 0 -maxBackgroundThreads; 0 -maxSubcompactionThreads; 0 -blockCacheSize; 0MB -memtableMemoryBudget; 0MB -maxWriteBatchSize; 5MB - -localnode -host; ; string; Node host (leave empty to auto-detect IP). -friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). -version; 1.0.1.0; uint32_t; Node version. -roles; Peer,Voting; ionet::NodeRoles; Node roles. - -outgoing_connections -maxConnections; 10; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - -incoming_connections -maxConnections; 512; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. -backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - -banning -defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. -maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. -keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. -maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. -numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). -readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. -maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. -minTransactionFailuresCountForBan; 8; ; -minTransactionFailuresPercentForBan; 10; ; - - -config-pt.properties -partialtransactions -cacheMaxResponseSize; 5MB -cacheMaxSize; 20MB - - -config-task.properties -logging task -startDelay; 1m -repeatDelay; 10m - -connect peers task for service Finalization -startDelay; 2s -repeatDelay; 1m - -finalization task -startDelay; 2m -repeatDelay; 15s - -pull finalization messages task -startDelay; 3s -repeatDelay; 1s - -pull finalization proof task -startDelay; 10s -repeatDelay; 50s - -harvesting task -startDelay; 30s -repeatDelay; 1s - -network chain height detection -startDelay; 1s -repeatDelay; 15s - -node discovery peers task -startDelay; 1m -minDelay; 1m -maxDelay; 10m -numPhaseOneRounds; 10 -numTransitionRounds; 20 - -node discovery ping task -startDelay; 2m -repeatDelay; 5m - -age peers task for service Readers -startDelay; 1m -repeatDelay; 1m - -batch partial transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Pt -startDelay; 3s -repeatDelay; 1m - -pull partial transactions task -startDelay; 10s -repeatDelay; 3s - -batch transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Sync -startDelay; 1s -repeatDelay; 1m - -pull unconfirmed transactions task -startDelay; 4s -repeatDelay; 3s - -synchronizer task -startDelay; 3s -repeatDelay; 3s - -time synchronization task -startDelay; 1m -minDelay; 3m -maxDelay; 180m -numPhaseOneRounds; 5 -numTransitionRounds; 10 - -static node refresh task -startDelay; 5ms -minDelay; 15s -maxDelay; 24h -numPhaseOneRounds; 20 -numTransitionRounds; 20 - - -config-timesync.properties -timesynchronization -maxNodes; 20 -minImportance; 10'000'000'000 - - -config-user.properties -account -enableDelegatedHarvestersAutoDetection; true - -storage -seedDirectory; ./seed -certificateDirectory; ./cert -dataDirectory; ./data -pluginsDirectory; /usr/catapult/lib -votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/test/reports/testnet-peer-non-harvesting-voting/node-config.rst b/test/reports/testnet-peer-non-harvesting-voting/node-config.rst deleted file mode 100644 index a39ac5750..000000000 --- a/test/reports/testnet-peer-non-harvesting-voting/node-config.rst +++ /dev/null @@ -1,874 +0,0 @@ -Symbol Bootstrap Version: CURRENT_VERSION - -config-database.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **database**; - databaseUri; mongodb://:27017 - databaseName; catapult - maxWriterThreads; 8 - maxDropBatchSize; 10 - writeTimeout; 10m - **plugins**; - catapult.mongo.plugins.accountlink; true - catapult.mongo.plugins.aggregate; true - catapult.mongo.plugins.lockhash; true - catapult.mongo.plugins.locksecret; true - catapult.mongo.plugins.metadata; true - catapult.mongo.plugins.mosaic; true - catapult.mongo.plugins.multisig; true - catapult.mongo.plugins.namespace; true - catapult.mongo.plugins.restrictionaccount; true - catapult.mongo.plugins.restrictionmosaic; true - catapult.mongo.plugins.transfer; true - -config-extensions-broker.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; true - extension.mongo; true - extension.zeromq; true - extension.hashcache; true - -config-extensions-recovery.properties -===================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.filespooling; true - extension.hashcache; true - -config-extensions-server.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.filespooling; false - extension.partialtransaction; false - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.harvesting; false - extension.syncsource; true - extension.diagnostics; true - extension.finalization; true - extension.hashcache; true - extension.networkheight; false - extension.nodediscovery; true - extension.packetserver; true - extension.pluginhandlers; true - extension.sync; true - extension.timesync; true - extension.transactionsink; true - extension.unbondedpruning; true - -config-finalization.properties -============================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **finalization**; - enableVoting; true - enableRevoteOnBoot; false - size; 10'000 - threshold; 7'000 - stepDuration; 4m - shortLivedCacheMessageDuration; 10m - messageSynchronizationMaxResponseSize; 20MB - maxHashesPerPoint; 256 - prevoteBlocksMultiple; 4 - unfinalizedBlocksDuration; 0m - -config-inflation.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **inflation**; - starting-at-height-2; 0 - starting-at-height-5760; 191997042 - starting-at-height-172799; 183764522 - starting-at-height-435299; 175884998 - starting-at-height-697799; 168343336 - starting-at-height-960299; 161125048 - starting-at-height-1222799; 154216270 - starting-at-height-1485299; 147603728 - starting-at-height-1747799; 141274720 - starting-at-height-2010299; 135217090 - starting-at-height-2272799; 129419202 - starting-at-height-2535299; 123869918 - starting-at-height-2797799; 118558578 - starting-at-height-3060299; 113474978 - starting-at-height-3322799; 108609356 - starting-at-height-3585299; 103952364 - starting-at-height-3847799; 99495056 - starting-at-height-4110299; 95228870 - starting-at-height-4372799; 91145612 - starting-at-height-4635299; 87237436 - starting-at-height-4897799; 83496838 - starting-at-height-5160299; 79916630 - starting-at-height-5422799; 76489934 - starting-at-height-5685299; 73210170 - starting-at-height-5947799; 70071038 - starting-at-height-6210299; 67066506 - starting-at-height-6472799; 64190804 - starting-at-height-6735299; 61438406 - starting-at-height-6997799; 58804028 - starting-at-height-7260299; 56282608 - starting-at-height-7522799; 53869300 - starting-at-height-7785299; 51559472 - starting-at-height-8047799; 49348686 - starting-at-height-8310299; 47232696 - starting-at-height-8572799; 45207434 - starting-at-height-8835299; 43269014 - starting-at-height-9097799; 41413708 - starting-at-height-9360299; 39637956 - starting-at-height-9622799; 37938346 - starting-at-height-9885299; 36311610 - starting-at-height-10147799; 34754628 - starting-at-height-10410299; 33264406 - starting-at-height-10672799; 31838082 - starting-at-height-10935299; 30472918 - starting-at-height-11197799; 29166288 - starting-at-height-11460299; 27915686 - starting-at-height-11722799; 26718706 - starting-at-height-11985299; 25573052 - starting-at-height-12247799; 24476520 - starting-at-height-12510299; 23427008 - starting-at-height-12772799; 22422496 - starting-at-height-13035299; 21461056 - starting-at-height-13297799; 20540840 - starting-at-height-13560299; 19660082 - starting-at-height-13822799; 18817090 - starting-at-height-14085299; 18010244 - starting-at-height-14347799; 17237994 - starting-at-height-14610299; 16498858 - starting-at-height-14872799; 15791412 - starting-at-height-15135299; 15114302 - starting-at-height-15397799; 14466226 - starting-at-height-15660299; 13845938 - starting-at-height-15922799; 13252246 - starting-at-height-16185299; 12684012 - starting-at-height-16447799; 12140142 - starting-at-height-16710299; 11619592 - starting-at-height-16972799; 11121364 - starting-at-height-17235299; 10644498 - starting-at-height-17497799; 10188078 - starting-at-height-17760299; 9751230 - starting-at-height-18022799; 9333114 - starting-at-height-18285299; 8932924 - starting-at-height-18547799; 8549896 - starting-at-height-18810299; 8183290 - starting-at-height-19072799; 7832404 - starting-at-height-19335299; 7496562 - starting-at-height-19597799; 7175122 - starting-at-height-19860299; 6867464 - starting-at-height-20122799; 6573000 - starting-at-height-20385299; 6291160 - starting-at-height-20647799; 6021404 - starting-at-height-20910299; 5763216 - starting-at-height-21172799; 5516100 - starting-at-height-21435299; 5279578 - starting-at-height-21697799; 5053198 - starting-at-height-21960299; 4836526 - starting-at-height-22222799; 4629144 - starting-at-height-22485299; 4430652 - starting-at-height-22747799; 4240674 - starting-at-height-23010299; 4058840 - starting-at-height-23272799; 3884804 - starting-at-height-23535299; 3718230 - starting-at-height-23797799; 3558798 - starting-at-height-24060299; 3406202 - starting-at-height-24322799; 3260150 - starting-at-height-24585299; 3120360 - starting-at-height-24847799; 2986564 - starting-at-height-25110299; 2858506 - starting-at-height-25372799; 2735938 - starting-at-height-25635299; 2618624 - starting-at-height-25897799; 2506342 - starting-at-height-26160299; 2398874 - starting-at-height-26422799; 2296014 - starting-at-height-26685299; 2197564 - starting-at-height-26947799; 2103336 - starting-at-height-27210299; 2013150 - starting-at-height-27472799; 1926828 - starting-at-height-27735299; 1844210 - starting-at-height-27997799; 1765132 - starting-at-height-28260299; 1689446 - starting-at-height-28522799; 1617006 - starting-at-height-28785299; 1547672 - starting-at-height-29047799; 1481310 - starting-at-height-29310299; 1417794 - starting-at-height-29572799; 1357000 - starting-at-height-29835299; 1298814 - starting-at-height-30097799; 1243124 - starting-at-height-30360299; 1189820 - starting-at-height-30622799; 1138802 - starting-at-height-30885299; 1089972 - starting-at-height-31147799; 1043236 - starting-at-height-31410299; 998504 - starting-at-height-31672799; 955690 - starting-at-height-31935299; 914712 - starting-at-height-32197799; 875490 - starting-at-height-32460299; 837950 - starting-at-height-32722799; 802020 - starting-at-height-32985299; 767630 - starting-at-height-33247799; 734716 - starting-at-height-33510299; 703212 - starting-at-height-33772799; 673060 - starting-at-height-34035299; 644200 - starting-at-height-34297799; 616578 - starting-at-height-34560299; 590140 - starting-at-height-34822799; 564836 - starting-at-height-35085299; 540616 - starting-at-height-35347799; 517436 - starting-at-height-35610299; 495248 - starting-at-height-35872799; 474014 - starting-at-height-36135299; 453688 - starting-at-height-36397799; 434234 - starting-at-height-36660299; 415616 - starting-at-height-36922799; 397794 - starting-at-height-37185299; 380738 - starting-at-height-37447799; 364412 - starting-at-height-37710299; 348786 - starting-at-height-37972799; 333832 - starting-at-height-38235299; 319518 - starting-at-height-38497799; 305816 - starting-at-height-38760299; 292704 - starting-at-height-39022799; 280154 - starting-at-height-39285299; 268140 - starting-at-height-39547799; 256644 - starting-at-height-39810299; 245638 - starting-at-height-40072799; 235106 - starting-at-height-40335299; 225026 - starting-at-height-40597799; 215376 - starting-at-height-40860299; 206142 - starting-at-height-41122799; 197302 - starting-at-height-41385299; 188842 - starting-at-height-41647799; 180744 - starting-at-height-41910299; 172994 - starting-at-height-42172799; 165578 - starting-at-height-42435299; 158478 - starting-at-height-42697799; 151682 - starting-at-height-42960299; 145178 - starting-at-height-43222799; 138954 - starting-at-height-43485299; 132994 - starting-at-height-43747799; 127292 - starting-at-height-44010299; 121834 - starting-at-height-44272799; 116610 - starting-at-height-44535299; 111610 - starting-at-height-44797799; 106824 - starting-at-height-45060299; 102244 - starting-at-height-45322799; 97860 - starting-at-height-45585299; 93664 - starting-at-height-45847799; 89648 - starting-at-height-46110299; 85804 - starting-at-height-46372799; 82124 - starting-at-height-46635299; 78602 - starting-at-height-46897799; 75232 - starting-at-height-47160299; 72006 - starting-at-height-47422799; 68920 - starting-at-height-47685299; 65964 - starting-at-height-47947799; 63136 - starting-at-height-48210299; 60428 - starting-at-height-48472799; 57838 - starting-at-height-48735299; 55358 - starting-at-height-48997799; 52984 - starting-at-height-49260299; 50712 - starting-at-height-49522799; 48538 - starting-at-height-49785299; 46456 - starting-at-height-50047799; 44464 - starting-at-height-50310299; 42558 - starting-at-height-50572799; 40732 - starting-at-height-50835299; 38986 - starting-at-height-51097799; 37314 - starting-at-height-51360299; 35714 - starting-at-height-51622799; 34182 - starting-at-height-51885299; 32716 - starting-at-height-52147799; 31314 - starting-at-height-52410299; 29972 - starting-at-height-52672799; 28686 - starting-at-height-52935299; 27456 - starting-at-height-53197799; 26278 - starting-at-height-53460299; 25152 - starting-at-height-53722799; 24074 - starting-at-height-53985299; 23042 - starting-at-height-54247799; 22054 - starting-at-height-54510299; 21108 - starting-at-height-54772799; 20202 - starting-at-height-55035299; 19336 - starting-at-height-55297799; 18506 - starting-at-height-55560299; 17714 - starting-at-height-55822799; 16954 - starting-at-height-56085299; 16226 - starting-at-height-56347799; 15532 - starting-at-height-56610299; 14866 - starting-at-height-56872799; 14228 - starting-at-height-57135299; 13618 - starting-at-height-57397799; 13034 - starting-at-height-57660299; 12474 - starting-at-height-57922799; 11940 - starting-at-height-58185299; 11428 - starting-at-height-58447799; 10938 - starting-at-height-58710299; 10468 - starting-at-height-58972799; 10020 - starting-at-height-59235299; 9590 - starting-at-height-59497799; 9178 - starting-at-height-59760299; 8786 - starting-at-height-60022799; 8408 - starting-at-height-60285299; 8048 - starting-at-height-60547799; 7702 - starting-at-height-60810299; 7372 - starting-at-height-61072799; 7056 - starting-at-height-61335299; 6754 - starting-at-height-61597799; 6464 - starting-at-height-61860299; 6186 - starting-at-height-62122799; 5922 - starting-at-height-62385299; 5668 - starting-at-height-62647799; 5424 - starting-at-height-62910299; 5192 - starting-at-height-63172799; 4970 - starting-at-height-63435299; 4756 - starting-at-height-63697799; 4552 - starting-at-height-63960299; 4356 - starting-at-height-64222799; 4170 - starting-at-height-64485299; 3992 - starting-at-height-64747799; 3820 - starting-at-height-65010299; 3656 - starting-at-height-65272799; 3500 - starting-at-height-65535299; 3350 - starting-at-height-65797799; 3206 - starting-at-height-66060299; 3068 - starting-at-height-66322799; 2936 - starting-at-height-66585299; 2810 - starting-at-height-66847799; 2690 - starting-at-height-67110299; 2574 - starting-at-height-67372799; 2464 - starting-at-height-67635299; 2358 - starting-at-height-67897799; 2258 - starting-at-height-68160299; 2160 - starting-at-height-68422799; 2068 - starting-at-height-68685299; 1980 - starting-at-height-68947799; 1894 - starting-at-height-69210299; 1812 - starting-at-height-69472799; 1736 - starting-at-height-69735299; 1660 - starting-at-height-69997799; 1590 - starting-at-height-70260299; 1522 - starting-at-height-70522799; 1456 - starting-at-height-70785299; 1394 - starting-at-height-71047799; 1334 - starting-at-height-71310299; 1276 - starting-at-height-71572799; 1222 - starting-at-height-71835299; 1170 - starting-at-height-72097799; 1120 - starting-at-height-72360299; 1072 - starting-at-height-72622799; 1026 - starting-at-height-72885299; 982 - starting-at-height-73147799; 938 - starting-at-height-73410299; 898 - starting-at-height-73672799; 860 - starting-at-height-73935299; 824 - starting-at-height-74197799; 788 - starting-at-height-74460299; 754 - starting-at-height-74722799; 722 - starting-at-height-74985299; 690 - starting-at-height-75247799; 662 - starting-at-height-75510299; 632 - starting-at-height-75772799; 606 - starting-at-height-76035299; 580 - starting-at-height-76297799; 554 - starting-at-height-76560299; 530 - starting-at-height-76822799; 508 - starting-at-height-77085299; 486 - starting-at-height-77347799; 466 - starting-at-height-77610299; 446 - starting-at-height-77872799; 426 - starting-at-height-78135299; 408 - starting-at-height-78397799; 390 - starting-at-height-78660299; 374 - starting-at-height-78922799; 358 - starting-at-height-79185299; 342 - starting-at-height-79447799; 328 - starting-at-height-79710299; 314 - starting-at-height-79972799; 300 - starting-at-height-80235299; 286 - starting-at-height-80497799; 274 - starting-at-height-80760299; 262 - starting-at-height-81022799; 252 - starting-at-height-81285299; 240 - starting-at-height-81547799; 230 - starting-at-height-81810299; 220 - starting-at-height-82072799; 210 - starting-at-height-82335299; 202 - starting-at-height-82597799; 194 - starting-at-height-82860299; 184 - starting-at-height-83122799; 176 - starting-at-height-83385299; 170 - starting-at-height-83647799; 162 - starting-at-height-83910299; 154 - starting-at-height-84172799; 148 - starting-at-height-84435299; 142 - starting-at-height-84697799; 136 - starting-at-height-84960299; 130 - starting-at-height-85222799; 124 - starting-at-height-85485299; 118 - starting-at-height-85747799; 114 - starting-at-height-86010299; 108 - starting-at-height-86272799; 104 - starting-at-height-86535299; 100 - starting-at-height-86797799; 96 - starting-at-height-87060299; 92 - starting-at-height-87322799; 88 - starting-at-height-87585299; 84 - starting-at-height-87847799; 80 - starting-at-height-88110299; 76 - starting-at-height-88372799; 72 - starting-at-height-88635299; 70 - starting-at-height-88897799; 66 - starting-at-height-89160299; 64 - starting-at-height-89422799; 62 - starting-at-height-89685299; 58 - starting-at-height-89947799; 56 - starting-at-height-90210299; 54 - starting-at-height-90472799; 52 - starting-at-height-90735299; 48 - starting-at-height-90997799; 46 - starting-at-height-91260299; 44 - starting-at-height-91522799; 42 - starting-at-height-91785299; 40 - starting-at-height-92047799; 40 - starting-at-height-92310299; 38 - starting-at-height-92572799; 36 - starting-at-height-92835299; 34 - starting-at-height-93097799; 32 - starting-at-height-93360299; 32 - starting-at-height-93622799; 30 - starting-at-height-93885299; 28 - starting-at-height-94147799; 28 - starting-at-height-94410299; 26 - starting-at-height-94672799; 24 - starting-at-height-94935299; 24 - starting-at-height-95197799; 22 - starting-at-height-95460299; 22 - starting-at-height-95722799; 20 - starting-at-height-95985299; 20 - starting-at-height-96247799; 18 - starting-at-height-96510299; 18 - starting-at-height-96772799; 18 - starting-at-height-97035299; 16 - starting-at-height-97297799; 16 - starting-at-height-97560299; 14 - starting-at-height-97822799; 14 - starting-at-height-98085299; 14 - starting-at-height-98347799; 12 - starting-at-height-98610299; 12 - starting-at-height-98872799; 12 - starting-at-height-99135299; 12 - starting-at-height-99397799; 10 - starting-at-height-99660299; 10 - starting-at-height-99922799; 10 - starting-at-height-100185299; 10 - starting-at-height-100447799; 8 - starting-at-height-100710299; 8 - starting-at-height-100972799; 8 - starting-at-height-101235299; 8 - starting-at-height-101497799; 8 - starting-at-height-101760299; 6 - starting-at-height-102022799; 6 - starting-at-height-102285299; 6 - starting-at-height-102547799; 6 - starting-at-height-102810299; 6 - starting-at-height-103072799; 6 - starting-at-height-103335299; 6 - starting-at-height-103597799; 4 - starting-at-height-103860299; 4 - starting-at-height-104122799; 4 - starting-at-height-104385299; 4 - starting-at-height-104647799; 4 - starting-at-height-104910299; 4 - starting-at-height-105172799; 4 - starting-at-height-105435299; 4 - starting-at-height-105697799; 4 - starting-at-height-105960299; 2 - starting-at-height-106222799; 2 - starting-at-height-106485299; 2 - starting-at-height-106747799; 2 - starting-at-height-107010299; 2 - starting-at-height-107272799; 2 - starting-at-height-107535299; 2 - starting-at-height-107797799; 2 - starting-at-height-108060299; 2 - starting-at-height-108322799; 2 - starting-at-height-108585299; 2 - starting-at-height-108847799; 2 - starting-at-height-109110299; 2 - starting-at-height-109372799; 2 - starting-at-height-109635299; 2 - starting-at-height-109897799; 2 - starting-at-height-110160299; 1 - starting-at-height-110422799; 0 - -config-logging-broker.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_broker%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-recovery.properties -================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_recovery%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-server.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_server%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-messaging.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **messaging**; - subscriberPort; 7902 - listenInterface; 0.0.0.0 - -config-network.properties -========================= -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **network**; ; ; - identifier; public-test; NetworkIdentifier; Network identifier. - nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. - nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. - generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; - epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. - **chain**; ; ; - enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. - enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. - currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. - harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. - blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. - blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. - importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. - importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. - maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. - maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. - defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. - maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. - maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. - initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. - maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. - totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. - minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. - votingSetGrouping; 720; ; - maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. - minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. - maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. - harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. - harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. - harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. - maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - **plugin:catapult.plugins.accountlink**; - dummy; to trigger plugin load - **plugin:catapult.plugins.aggregate**; ; ; - maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. - maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. - enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. - enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. - maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - **plugin:catapult.plugins.lockhash**; ; ; - lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. - maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - **plugin:catapult.plugins.locksecret**; ; ; - maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. - minProofSize; 0; uint16_t; Minimum size of a proof in bytes. - maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - **plugin:catapult.plugins.metadata**; ; ; - maxValueSize; 1024; uint16_t; Maximum metadata value size. - **plugin:catapult.plugins.mosaic**; ; ; - maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. - maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. - maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. - mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. - mosaicRentalFee; 500000; Amount; Mosaic rental fee. - **plugin:catapult.plugins.multisig**; ; ; - maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. - maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. - maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - **plugin:catapult.plugins.namespace**; ; ; - maxNameSize; 64; uint8_t; Maximum namespace name size. - maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. - maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. - minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. - maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. - namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. - reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. - namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. - rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. - childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - **plugin:catapult.plugins.restrictionaccount**; ; ; - maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - **plugin:catapult.plugins.restrictionmosaic**; ; ; - maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - **plugin:catapult.plugins.transfer**; ; ; - maxMessageSize; 1024; uint16_t; Maximum transaction message size. - -config-node.properties -====================== -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **node**; ; ; - port; 7900; unsigned short; Server port. - maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. - enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. - enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. - enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. - enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. - fileDatabaseBatchSize; 100; ; - enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. - transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. - maxHashesPerSyncAttempt; 370; ; - maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. - maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. - shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. - shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. - shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. - shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. - minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. - maxTimeBehindPullTransactionsStart; 5m; ; - transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. - unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. - unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. - connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. - syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. - socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). - socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. - maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. - blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. - blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. - blockDisruptorMaxMemorySize; 300MB; ; - transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. - transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. - transactionDisruptorMaxMemorySize; 20MB; ; - enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. - enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. - maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. - minPartnerNodeVersion; 1.0.0.0; ; - maxPartnerNodeVersion; 1.0.255.255; ; - trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. - localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. - listenInterface; 0.0.0.0; ; - **cache_database**; - enableStatistics; false - maxOpenFiles; 0 - maxBackgroundThreads; 0 - maxSubcompactionThreads; 0 - blockCacheSize; 0MB - memtableMemoryBudget; 0MB - maxWriteBatchSize; 5MB - **localnode**; ; ; - host; ; string; Node host (leave empty to auto-detect IP). - friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). - version; 1.0.1.0; uint32_t; Node version. - roles; Peer,Voting; ionet::NodeRoles; Node roles. - **outgoing_connections**; ; ; - maxConnections; 10; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - **incoming_connections**; ; ; - maxConnections; 512; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - **banning**; ; ; - defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. - maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. - keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. - maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. - numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). - readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. - maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. - minTransactionFailuresCountForBan; 8; ; - minTransactionFailuresPercentForBan; 10; ; - -config-pt.properties -==================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **partialtransactions**; - cacheMaxResponseSize; 5MB - cacheMaxSize; 20MB - -config-task.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **logging task**; - startDelay; 1m - repeatDelay; 10m - **connect peers task for service Finalization**; - startDelay; 2s - repeatDelay; 1m - **finalization task**; - startDelay; 2m - repeatDelay; 15s - **pull finalization messages task**; - startDelay; 3s - repeatDelay; 1s - **pull finalization proof task**; - startDelay; 10s - repeatDelay; 50s - **harvesting task**; - startDelay; 30s - repeatDelay; 1s - **network chain height detection**; - startDelay; 1s - repeatDelay; 15s - **node discovery peers task**; - startDelay; 1m - minDelay; 1m - maxDelay; 10m - numPhaseOneRounds; 10 - numTransitionRounds; 20 - **node discovery ping task**; - startDelay; 2m - repeatDelay; 5m - **age peers task for service Readers**; - startDelay; 1m - repeatDelay; 1m - **batch partial transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Pt**; - startDelay; 3s - repeatDelay; 1m - **pull partial transactions task**; - startDelay; 10s - repeatDelay; 3s - **batch transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Sync**; - startDelay; 1s - repeatDelay; 1m - **pull unconfirmed transactions task**; - startDelay; 4s - repeatDelay; 3s - **synchronizer task**; - startDelay; 3s - repeatDelay; 3s - **time synchronization task**; - startDelay; 1m - minDelay; 3m - maxDelay; 180m - numPhaseOneRounds; 5 - numTransitionRounds; 10 - **static node refresh task**; - startDelay; 5ms - minDelay; 15s - maxDelay; 24h - numPhaseOneRounds; 20 - numTransitionRounds; 20 - -config-timesync.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **timesynchronization**; - maxNodes; 20 - minImportance; 10'000'000'000 - -config-user.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **account**; - enableDelegatedHarvestersAutoDetection; true - **storage**; - seedDirectory; ./seed - certificateDirectory; ./cert - dataDirectory; ./data - pluginsDirectory; /usr/catapult/lib - votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/test/reports/testnet-peer-voting/node-config.csv b/test/reports/testnet-peer-voting/node-config.csv deleted file mode 100644 index d95c79de9..000000000 --- a/test/reports/testnet-peer-voting/node-config.csv +++ /dev/null @@ -1,865 +0,0 @@ -symbol-bootstrap-version; CURRENT_VERSION - -config-database.properties -database -databaseUri; mongodb://:27017 -databaseName; catapult -maxWriterThreads; 8 -maxDropBatchSize; 10 -writeTimeout; 10m - -plugins -catapult.mongo.plugins.accountlink; true -catapult.mongo.plugins.aggregate; true -catapult.mongo.plugins.lockhash; true -catapult.mongo.plugins.locksecret; true -catapult.mongo.plugins.metadata; true -catapult.mongo.plugins.mosaic; true -catapult.mongo.plugins.multisig; true -catapult.mongo.plugins.namespace; true -catapult.mongo.plugins.restrictionaccount; true -catapult.mongo.plugins.restrictionmosaic; true -catapult.mongo.plugins.transfer; true - - -config-extensions-broker.properties -extensions -extension.addressextraction; true -extension.mongo; true -extension.zeromq; true -extension.hashcache; true - - -config-extensions-recovery.properties -extensions -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.filespooling; true -extension.hashcache; true - - -config-extensions-server.properties -extensions -extension.filespooling; false -extension.partialtransaction; false -extension.addressextraction; false -extension.mongo; false -extension.zeromq; false -extension.harvesting; true -extension.syncsource; true -extension.diagnostics; true -extension.finalization; true -extension.hashcache; true -extension.networkheight; false -extension.nodediscovery; true -extension.packetserver; true -extension.pluginhandlers; true -extension.sync; true -extension.timesync; true -extension.transactionsink; true -extension.unbondedpruning; true - - -config-finalization.properties -finalization -enableVoting; true -enableRevoteOnBoot; false -size; 10'000 -threshold; 7'000 -stepDuration; 4m -shortLivedCacheMessageDuration; 10m -messageSynchronizationMaxResponseSize; 20MB -maxHashesPerPoint; 256 -prevoteBlocksMultiple; 4 -unfinalizedBlocksDuration; 0m - - -config-harvesting.properties -harvesting -harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. -harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. -enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. -maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. -delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. -beneficiaryAddress; TDQ32MTJICEPJDU45KVN7BAM4A4GI7OARMLVSXQ; Address; Address of the account receiving part of the harvested fee. - - -config-inflation.properties -inflation -starting-at-height-2; 0 -starting-at-height-5760; 191997042 -starting-at-height-172799; 183764522 -starting-at-height-435299; 175884998 -starting-at-height-697799; 168343336 -starting-at-height-960299; 161125048 -starting-at-height-1222799; 154216270 -starting-at-height-1485299; 147603728 -starting-at-height-1747799; 141274720 -starting-at-height-2010299; 135217090 -starting-at-height-2272799; 129419202 -starting-at-height-2535299; 123869918 -starting-at-height-2797799; 118558578 -starting-at-height-3060299; 113474978 -starting-at-height-3322799; 108609356 -starting-at-height-3585299; 103952364 -starting-at-height-3847799; 99495056 -starting-at-height-4110299; 95228870 -starting-at-height-4372799; 91145612 -starting-at-height-4635299; 87237436 -starting-at-height-4897799; 83496838 -starting-at-height-5160299; 79916630 -starting-at-height-5422799; 76489934 -starting-at-height-5685299; 73210170 -starting-at-height-5947799; 70071038 -starting-at-height-6210299; 67066506 -starting-at-height-6472799; 64190804 -starting-at-height-6735299; 61438406 -starting-at-height-6997799; 58804028 -starting-at-height-7260299; 56282608 -starting-at-height-7522799; 53869300 -starting-at-height-7785299; 51559472 -starting-at-height-8047799; 49348686 -starting-at-height-8310299; 47232696 -starting-at-height-8572799; 45207434 -starting-at-height-8835299; 43269014 -starting-at-height-9097799; 41413708 -starting-at-height-9360299; 39637956 -starting-at-height-9622799; 37938346 -starting-at-height-9885299; 36311610 -starting-at-height-10147799; 34754628 -starting-at-height-10410299; 33264406 -starting-at-height-10672799; 31838082 -starting-at-height-10935299; 30472918 -starting-at-height-11197799; 29166288 -starting-at-height-11460299; 27915686 -starting-at-height-11722799; 26718706 -starting-at-height-11985299; 25573052 -starting-at-height-12247799; 24476520 -starting-at-height-12510299; 23427008 -starting-at-height-12772799; 22422496 -starting-at-height-13035299; 21461056 -starting-at-height-13297799; 20540840 -starting-at-height-13560299; 19660082 -starting-at-height-13822799; 18817090 -starting-at-height-14085299; 18010244 -starting-at-height-14347799; 17237994 -starting-at-height-14610299; 16498858 -starting-at-height-14872799; 15791412 -starting-at-height-15135299; 15114302 -starting-at-height-15397799; 14466226 -starting-at-height-15660299; 13845938 -starting-at-height-15922799; 13252246 -starting-at-height-16185299; 12684012 -starting-at-height-16447799; 12140142 -starting-at-height-16710299; 11619592 -starting-at-height-16972799; 11121364 -starting-at-height-17235299; 10644498 -starting-at-height-17497799; 10188078 -starting-at-height-17760299; 9751230 -starting-at-height-18022799; 9333114 -starting-at-height-18285299; 8932924 -starting-at-height-18547799; 8549896 -starting-at-height-18810299; 8183290 -starting-at-height-19072799; 7832404 -starting-at-height-19335299; 7496562 -starting-at-height-19597799; 7175122 -starting-at-height-19860299; 6867464 -starting-at-height-20122799; 6573000 -starting-at-height-20385299; 6291160 -starting-at-height-20647799; 6021404 -starting-at-height-20910299; 5763216 -starting-at-height-21172799; 5516100 -starting-at-height-21435299; 5279578 -starting-at-height-21697799; 5053198 -starting-at-height-21960299; 4836526 -starting-at-height-22222799; 4629144 -starting-at-height-22485299; 4430652 -starting-at-height-22747799; 4240674 -starting-at-height-23010299; 4058840 -starting-at-height-23272799; 3884804 -starting-at-height-23535299; 3718230 -starting-at-height-23797799; 3558798 -starting-at-height-24060299; 3406202 -starting-at-height-24322799; 3260150 -starting-at-height-24585299; 3120360 -starting-at-height-24847799; 2986564 -starting-at-height-25110299; 2858506 -starting-at-height-25372799; 2735938 -starting-at-height-25635299; 2618624 -starting-at-height-25897799; 2506342 -starting-at-height-26160299; 2398874 -starting-at-height-26422799; 2296014 -starting-at-height-26685299; 2197564 -starting-at-height-26947799; 2103336 -starting-at-height-27210299; 2013150 -starting-at-height-27472799; 1926828 -starting-at-height-27735299; 1844210 -starting-at-height-27997799; 1765132 -starting-at-height-28260299; 1689446 -starting-at-height-28522799; 1617006 -starting-at-height-28785299; 1547672 -starting-at-height-29047799; 1481310 -starting-at-height-29310299; 1417794 -starting-at-height-29572799; 1357000 -starting-at-height-29835299; 1298814 -starting-at-height-30097799; 1243124 -starting-at-height-30360299; 1189820 -starting-at-height-30622799; 1138802 -starting-at-height-30885299; 1089972 -starting-at-height-31147799; 1043236 -starting-at-height-31410299; 998504 -starting-at-height-31672799; 955690 -starting-at-height-31935299; 914712 -starting-at-height-32197799; 875490 -starting-at-height-32460299; 837950 -starting-at-height-32722799; 802020 -starting-at-height-32985299; 767630 -starting-at-height-33247799; 734716 -starting-at-height-33510299; 703212 -starting-at-height-33772799; 673060 -starting-at-height-34035299; 644200 -starting-at-height-34297799; 616578 -starting-at-height-34560299; 590140 -starting-at-height-34822799; 564836 -starting-at-height-35085299; 540616 -starting-at-height-35347799; 517436 -starting-at-height-35610299; 495248 -starting-at-height-35872799; 474014 -starting-at-height-36135299; 453688 -starting-at-height-36397799; 434234 -starting-at-height-36660299; 415616 -starting-at-height-36922799; 397794 -starting-at-height-37185299; 380738 -starting-at-height-37447799; 364412 -starting-at-height-37710299; 348786 -starting-at-height-37972799; 333832 -starting-at-height-38235299; 319518 -starting-at-height-38497799; 305816 -starting-at-height-38760299; 292704 -starting-at-height-39022799; 280154 -starting-at-height-39285299; 268140 -starting-at-height-39547799; 256644 -starting-at-height-39810299; 245638 -starting-at-height-40072799; 235106 -starting-at-height-40335299; 225026 -starting-at-height-40597799; 215376 -starting-at-height-40860299; 206142 -starting-at-height-41122799; 197302 -starting-at-height-41385299; 188842 -starting-at-height-41647799; 180744 -starting-at-height-41910299; 172994 -starting-at-height-42172799; 165578 -starting-at-height-42435299; 158478 -starting-at-height-42697799; 151682 -starting-at-height-42960299; 145178 -starting-at-height-43222799; 138954 -starting-at-height-43485299; 132994 -starting-at-height-43747799; 127292 -starting-at-height-44010299; 121834 -starting-at-height-44272799; 116610 -starting-at-height-44535299; 111610 -starting-at-height-44797799; 106824 -starting-at-height-45060299; 102244 -starting-at-height-45322799; 97860 -starting-at-height-45585299; 93664 -starting-at-height-45847799; 89648 -starting-at-height-46110299; 85804 -starting-at-height-46372799; 82124 -starting-at-height-46635299; 78602 -starting-at-height-46897799; 75232 -starting-at-height-47160299; 72006 -starting-at-height-47422799; 68920 -starting-at-height-47685299; 65964 -starting-at-height-47947799; 63136 -starting-at-height-48210299; 60428 -starting-at-height-48472799; 57838 -starting-at-height-48735299; 55358 -starting-at-height-48997799; 52984 -starting-at-height-49260299; 50712 -starting-at-height-49522799; 48538 -starting-at-height-49785299; 46456 -starting-at-height-50047799; 44464 -starting-at-height-50310299; 42558 -starting-at-height-50572799; 40732 -starting-at-height-50835299; 38986 -starting-at-height-51097799; 37314 -starting-at-height-51360299; 35714 -starting-at-height-51622799; 34182 -starting-at-height-51885299; 32716 -starting-at-height-52147799; 31314 -starting-at-height-52410299; 29972 -starting-at-height-52672799; 28686 -starting-at-height-52935299; 27456 -starting-at-height-53197799; 26278 -starting-at-height-53460299; 25152 -starting-at-height-53722799; 24074 -starting-at-height-53985299; 23042 -starting-at-height-54247799; 22054 -starting-at-height-54510299; 21108 -starting-at-height-54772799; 20202 -starting-at-height-55035299; 19336 -starting-at-height-55297799; 18506 -starting-at-height-55560299; 17714 -starting-at-height-55822799; 16954 -starting-at-height-56085299; 16226 -starting-at-height-56347799; 15532 -starting-at-height-56610299; 14866 -starting-at-height-56872799; 14228 -starting-at-height-57135299; 13618 -starting-at-height-57397799; 13034 -starting-at-height-57660299; 12474 -starting-at-height-57922799; 11940 -starting-at-height-58185299; 11428 -starting-at-height-58447799; 10938 -starting-at-height-58710299; 10468 -starting-at-height-58972799; 10020 -starting-at-height-59235299; 9590 -starting-at-height-59497799; 9178 -starting-at-height-59760299; 8786 -starting-at-height-60022799; 8408 -starting-at-height-60285299; 8048 -starting-at-height-60547799; 7702 -starting-at-height-60810299; 7372 -starting-at-height-61072799; 7056 -starting-at-height-61335299; 6754 -starting-at-height-61597799; 6464 -starting-at-height-61860299; 6186 -starting-at-height-62122799; 5922 -starting-at-height-62385299; 5668 -starting-at-height-62647799; 5424 -starting-at-height-62910299; 5192 -starting-at-height-63172799; 4970 -starting-at-height-63435299; 4756 -starting-at-height-63697799; 4552 -starting-at-height-63960299; 4356 -starting-at-height-64222799; 4170 -starting-at-height-64485299; 3992 -starting-at-height-64747799; 3820 -starting-at-height-65010299; 3656 -starting-at-height-65272799; 3500 -starting-at-height-65535299; 3350 -starting-at-height-65797799; 3206 -starting-at-height-66060299; 3068 -starting-at-height-66322799; 2936 -starting-at-height-66585299; 2810 -starting-at-height-66847799; 2690 -starting-at-height-67110299; 2574 -starting-at-height-67372799; 2464 -starting-at-height-67635299; 2358 -starting-at-height-67897799; 2258 -starting-at-height-68160299; 2160 -starting-at-height-68422799; 2068 -starting-at-height-68685299; 1980 -starting-at-height-68947799; 1894 -starting-at-height-69210299; 1812 -starting-at-height-69472799; 1736 -starting-at-height-69735299; 1660 -starting-at-height-69997799; 1590 -starting-at-height-70260299; 1522 -starting-at-height-70522799; 1456 -starting-at-height-70785299; 1394 -starting-at-height-71047799; 1334 -starting-at-height-71310299; 1276 -starting-at-height-71572799; 1222 -starting-at-height-71835299; 1170 -starting-at-height-72097799; 1120 -starting-at-height-72360299; 1072 -starting-at-height-72622799; 1026 -starting-at-height-72885299; 982 -starting-at-height-73147799; 938 -starting-at-height-73410299; 898 -starting-at-height-73672799; 860 -starting-at-height-73935299; 824 -starting-at-height-74197799; 788 -starting-at-height-74460299; 754 -starting-at-height-74722799; 722 -starting-at-height-74985299; 690 -starting-at-height-75247799; 662 -starting-at-height-75510299; 632 -starting-at-height-75772799; 606 -starting-at-height-76035299; 580 -starting-at-height-76297799; 554 -starting-at-height-76560299; 530 -starting-at-height-76822799; 508 -starting-at-height-77085299; 486 -starting-at-height-77347799; 466 -starting-at-height-77610299; 446 -starting-at-height-77872799; 426 -starting-at-height-78135299; 408 -starting-at-height-78397799; 390 -starting-at-height-78660299; 374 -starting-at-height-78922799; 358 -starting-at-height-79185299; 342 -starting-at-height-79447799; 328 -starting-at-height-79710299; 314 -starting-at-height-79972799; 300 -starting-at-height-80235299; 286 -starting-at-height-80497799; 274 -starting-at-height-80760299; 262 -starting-at-height-81022799; 252 -starting-at-height-81285299; 240 -starting-at-height-81547799; 230 -starting-at-height-81810299; 220 -starting-at-height-82072799; 210 -starting-at-height-82335299; 202 -starting-at-height-82597799; 194 -starting-at-height-82860299; 184 -starting-at-height-83122799; 176 -starting-at-height-83385299; 170 -starting-at-height-83647799; 162 -starting-at-height-83910299; 154 -starting-at-height-84172799; 148 -starting-at-height-84435299; 142 -starting-at-height-84697799; 136 -starting-at-height-84960299; 130 -starting-at-height-85222799; 124 -starting-at-height-85485299; 118 -starting-at-height-85747799; 114 -starting-at-height-86010299; 108 -starting-at-height-86272799; 104 -starting-at-height-86535299; 100 -starting-at-height-86797799; 96 -starting-at-height-87060299; 92 -starting-at-height-87322799; 88 -starting-at-height-87585299; 84 -starting-at-height-87847799; 80 -starting-at-height-88110299; 76 -starting-at-height-88372799; 72 -starting-at-height-88635299; 70 -starting-at-height-88897799; 66 -starting-at-height-89160299; 64 -starting-at-height-89422799; 62 -starting-at-height-89685299; 58 -starting-at-height-89947799; 56 -starting-at-height-90210299; 54 -starting-at-height-90472799; 52 -starting-at-height-90735299; 48 -starting-at-height-90997799; 46 -starting-at-height-91260299; 44 -starting-at-height-91522799; 42 -starting-at-height-91785299; 40 -starting-at-height-92047799; 40 -starting-at-height-92310299; 38 -starting-at-height-92572799; 36 -starting-at-height-92835299; 34 -starting-at-height-93097799; 32 -starting-at-height-93360299; 32 -starting-at-height-93622799; 30 -starting-at-height-93885299; 28 -starting-at-height-94147799; 28 -starting-at-height-94410299; 26 -starting-at-height-94672799; 24 -starting-at-height-94935299; 24 -starting-at-height-95197799; 22 -starting-at-height-95460299; 22 -starting-at-height-95722799; 20 -starting-at-height-95985299; 20 -starting-at-height-96247799; 18 -starting-at-height-96510299; 18 -starting-at-height-96772799; 18 -starting-at-height-97035299; 16 -starting-at-height-97297799; 16 -starting-at-height-97560299; 14 -starting-at-height-97822799; 14 -starting-at-height-98085299; 14 -starting-at-height-98347799; 12 -starting-at-height-98610299; 12 -starting-at-height-98872799; 12 -starting-at-height-99135299; 12 -starting-at-height-99397799; 10 -starting-at-height-99660299; 10 -starting-at-height-99922799; 10 -starting-at-height-100185299; 10 -starting-at-height-100447799; 8 -starting-at-height-100710299; 8 -starting-at-height-100972799; 8 -starting-at-height-101235299; 8 -starting-at-height-101497799; 8 -starting-at-height-101760299; 6 -starting-at-height-102022799; 6 -starting-at-height-102285299; 6 -starting-at-height-102547799; 6 -starting-at-height-102810299; 6 -starting-at-height-103072799; 6 -starting-at-height-103335299; 6 -starting-at-height-103597799; 4 -starting-at-height-103860299; 4 -starting-at-height-104122799; 4 -starting-at-height-104385299; 4 -starting-at-height-104647799; 4 -starting-at-height-104910299; 4 -starting-at-height-105172799; 4 -starting-at-height-105435299; 4 -starting-at-height-105697799; 4 -starting-at-height-105960299; 2 -starting-at-height-106222799; 2 -starting-at-height-106485299; 2 -starting-at-height-106747799; 2 -starting-at-height-107010299; 2 -starting-at-height-107272799; 2 -starting-at-height-107535299; 2 -starting-at-height-107797799; 2 -starting-at-height-108060299; 2 -starting-at-height-108322799; 2 -starting-at-height-108585299; 2 -starting-at-height-108847799; 2 -starting-at-height-109110299; 2 -starting-at-height-109372799; 2 -starting-at-height-109635299; 2 -starting-at-height-109897799; 2 -starting-at-height-110160299; 1 -starting-at-height-110422799; 0 - - -config-logging-broker.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_broker%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-recovery.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_recovery%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-logging-server.properties -console -sinkType; Async -level; Info -colorMode; Ansi - -console.component.levels - -file -sinkType; Async -level; Info -directory; logs -filePattern; logs/catapult_server%4N.log -rotationSize; 25MB -maxTotalSize; 1000MB -minFreeSpace; 100MB - -file.component.levels - - -config-messaging.properties -messaging -subscriberPort; 7902 -listenInterface; 0.0.0.0 - - -config-network.properties -network -identifier; public-test; NetworkIdentifier; Network identifier. -nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. -nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. -generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; -epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. - -chain -enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. -enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. -currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. -harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. -blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. -blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. -importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. -importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. -maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. -maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. -defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. -maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. -maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. -initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. -maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. -totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. -minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. -minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. -votingSetGrouping; 720; ; -maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. -minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. -maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. -harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. -harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. -harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. -maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - -plugin:catapult.plugins.accountlink -dummy; to trigger plugin load - -plugin:catapult.plugins.aggregate -maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. -maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. -enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. -enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. -maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - -plugin:catapult.plugins.lockhash -lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. -maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - -plugin:catapult.plugins.locksecret -maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. -minProofSize; 0; uint16_t; Minimum size of a proof in bytes. -maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - -plugin:catapult.plugins.metadata -maxValueSize; 1024; uint16_t; Maximum metadata value size. - -plugin:catapult.plugins.mosaic -maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. -maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. -maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. -mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. -mosaicRentalFee; 500000; Amount; Mosaic rental fee. - -plugin:catapult.plugins.multisig -maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. -maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. -maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - -plugin:catapult.plugins.namespace -maxNameSize; 64; uint8_t; Maximum namespace name size. -maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. -maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. -minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. -maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. -namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. -reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. -namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. -rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. -childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - -plugin:catapult.plugins.restrictionaccount -maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - -plugin:catapult.plugins.restrictionmosaic -maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - -plugin:catapult.plugins.transfer -maxMessageSize; 1024; uint16_t; Maximum transaction message size. - - -config-node.properties -node -port; 7900; unsigned short; Server port. -maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. -enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. -enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. -enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. -enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. -fileDatabaseBatchSize; 100; ; -enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. -transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. -maxHashesPerSyncAttempt; 370; ; -maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. -maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. -shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. -shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. -shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. -shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. -minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. -maxTimeBehindPullTransactionsStart; 5m; ; -transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. -unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. -unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. -connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. -syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. -socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). -socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. -maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. -blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. -blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. -blockDisruptorMaxMemorySize; 300MB; ; -transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. -transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. -transactionDisruptorMaxMemorySize; 20MB; ; -enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. -enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. -maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. -minPartnerNodeVersion; 1.0.0.0; ; -maxPartnerNodeVersion; 1.0.255.255; ; -trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. -localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. -listenInterface; 0.0.0.0; ; - -cache_database -enableStatistics; false -maxOpenFiles; 0 -maxBackgroundThreads; 0 -maxSubcompactionThreads; 0 -blockCacheSize; 0MB -memtableMemoryBudget; 0MB -maxWriteBatchSize; 5MB - -localnode -host; ; string; Node host (leave empty to auto-detect IP). -friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). -version; 1.0.1.0; uint32_t; Node version. -roles; Peer,Voting; ionet::NodeRoles; Node roles. - -outgoing_connections -maxConnections; 10; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - -incoming_connections -maxConnections; 512; uint16_t; Maximum number of active connections. -maxConnectionAge; 200; uint16_t; Maximum connection age. -maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. -numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. -backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - -banning -defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. -maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. -keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. -maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. -numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). -readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. -maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. -minTransactionFailuresCountForBan; 8; ; -minTransactionFailuresPercentForBan; 10; ; - - -config-pt.properties -partialtransactions -cacheMaxResponseSize; 5MB -cacheMaxSize; 20MB - - -config-task.properties -logging task -startDelay; 1m -repeatDelay; 10m - -connect peers task for service Finalization -startDelay; 2s -repeatDelay; 1m - -finalization task -startDelay; 2m -repeatDelay; 15s - -pull finalization messages task -startDelay; 3s -repeatDelay; 1s - -pull finalization proof task -startDelay; 10s -repeatDelay; 50s - -harvesting task -startDelay; 30s -repeatDelay; 1s - -network chain height detection -startDelay; 1s -repeatDelay; 15s - -node discovery peers task -startDelay; 1m -minDelay; 1m -maxDelay; 10m -numPhaseOneRounds; 10 -numTransitionRounds; 20 - -node discovery ping task -startDelay; 2m -repeatDelay; 5m - -age peers task for service Readers -startDelay; 1m -repeatDelay; 1m - -batch partial transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Pt -startDelay; 3s -repeatDelay; 1m - -pull partial transactions task -startDelay; 10s -repeatDelay; 3s - -batch transaction task -startDelay; 500ms -repeatDelay; 500ms - -connect peers task for service Sync -startDelay; 1s -repeatDelay; 1m - -pull unconfirmed transactions task -startDelay; 4s -repeatDelay; 3s - -synchronizer task -startDelay; 3s -repeatDelay; 3s - -time synchronization task -startDelay; 1m -minDelay; 3m -maxDelay; 180m -numPhaseOneRounds; 5 -numTransitionRounds; 10 - -static node refresh task -startDelay; 5ms -minDelay; 15s -maxDelay; 24h -numPhaseOneRounds; 20 -numTransitionRounds; 20 - - -config-timesync.properties -timesynchronization -maxNodes; 20 -minImportance; 10'000'000'000 - - -config-user.properties -account -enableDelegatedHarvestersAutoDetection; true - -storage -seedDirectory; ./seed -certificateDirectory; ./cert -dataDirectory; ./data -pluginsDirectory; /usr/catapult/lib -votingKeysDirectory; ./votingkeys \ No newline at end of file diff --git a/test/reports/testnet-peer-voting/node-config.rst b/test/reports/testnet-peer-voting/node-config.rst deleted file mode 100644 index 837cf795f..000000000 --- a/test/reports/testnet-peer-voting/node-config.rst +++ /dev/null @@ -1,888 +0,0 @@ -Symbol Bootstrap Version: CURRENT_VERSION - -config-database.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **database**; - databaseUri; mongodb://:27017 - databaseName; catapult - maxWriterThreads; 8 - maxDropBatchSize; 10 - writeTimeout; 10m - **plugins**; - catapult.mongo.plugins.accountlink; true - catapult.mongo.plugins.aggregate; true - catapult.mongo.plugins.lockhash; true - catapult.mongo.plugins.locksecret; true - catapult.mongo.plugins.metadata; true - catapult.mongo.plugins.mosaic; true - catapult.mongo.plugins.multisig; true - catapult.mongo.plugins.namespace; true - catapult.mongo.plugins.restrictionaccount; true - catapult.mongo.plugins.restrictionmosaic; true - catapult.mongo.plugins.transfer; true - -config-extensions-broker.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; true - extension.mongo; true - extension.zeromq; true - extension.hashcache; true - -config-extensions-recovery.properties -===================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.filespooling; true - extension.hashcache; true - -config-extensions-server.properties -=================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **extensions**; - extension.filespooling; false - extension.partialtransaction; false - extension.addressextraction; false - extension.mongo; false - extension.zeromq; false - extension.harvesting; true - extension.syncsource; true - extension.diagnostics; true - extension.finalization; true - extension.hashcache; true - extension.networkheight; false - extension.nodediscovery; true - extension.packetserver; true - extension.pluginhandlers; true - extension.sync; true - extension.timesync; true - extension.transactionsink; true - extension.unbondedpruning; true - -config-finalization.properties -============================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **finalization**; - enableVoting; true - enableRevoteOnBoot; false - size; 10'000 - threshold; 7'000 - stepDuration; 4m - shortLivedCacheMessageDuration; 10m - messageSynchronizationMaxResponseSize; 20MB - maxHashesPerPoint; 256 - prevoteBlocksMultiple; 4 - unfinalizedBlocksDuration; 0m - -config-harvesting.properties -============================ -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **harvesting**; ; ; - harvesterSigningPrivateKey; ****************************************************************; string; Harvester signing private key. - harvesterVrfPrivateKey; ****************************************************************; string; Harvester vrf private key. - enableAutoHarvesting; true; bool; Set to true if auto harvesting is enabled. - maxUnlockedAccounts; 10; uint32_t; Maximum number of unlocked accounts. - delegatePrioritizationPolicy; Importance; harvesting::DelegatePrioritizationPolicy; Delegate harvester prioritization policy. - beneficiaryAddress; TDQ32MTJICEPJDU45KVN7BAM4A4GI7OARMLVSXQ; Address; Address of the account receiving part of the harvested fee. - -config-inflation.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **inflation**; - starting-at-height-2; 0 - starting-at-height-5760; 191997042 - starting-at-height-172799; 183764522 - starting-at-height-435299; 175884998 - starting-at-height-697799; 168343336 - starting-at-height-960299; 161125048 - starting-at-height-1222799; 154216270 - starting-at-height-1485299; 147603728 - starting-at-height-1747799; 141274720 - starting-at-height-2010299; 135217090 - starting-at-height-2272799; 129419202 - starting-at-height-2535299; 123869918 - starting-at-height-2797799; 118558578 - starting-at-height-3060299; 113474978 - starting-at-height-3322799; 108609356 - starting-at-height-3585299; 103952364 - starting-at-height-3847799; 99495056 - starting-at-height-4110299; 95228870 - starting-at-height-4372799; 91145612 - starting-at-height-4635299; 87237436 - starting-at-height-4897799; 83496838 - starting-at-height-5160299; 79916630 - starting-at-height-5422799; 76489934 - starting-at-height-5685299; 73210170 - starting-at-height-5947799; 70071038 - starting-at-height-6210299; 67066506 - starting-at-height-6472799; 64190804 - starting-at-height-6735299; 61438406 - starting-at-height-6997799; 58804028 - starting-at-height-7260299; 56282608 - starting-at-height-7522799; 53869300 - starting-at-height-7785299; 51559472 - starting-at-height-8047799; 49348686 - starting-at-height-8310299; 47232696 - starting-at-height-8572799; 45207434 - starting-at-height-8835299; 43269014 - starting-at-height-9097799; 41413708 - starting-at-height-9360299; 39637956 - starting-at-height-9622799; 37938346 - starting-at-height-9885299; 36311610 - starting-at-height-10147799; 34754628 - starting-at-height-10410299; 33264406 - starting-at-height-10672799; 31838082 - starting-at-height-10935299; 30472918 - starting-at-height-11197799; 29166288 - starting-at-height-11460299; 27915686 - starting-at-height-11722799; 26718706 - starting-at-height-11985299; 25573052 - starting-at-height-12247799; 24476520 - starting-at-height-12510299; 23427008 - starting-at-height-12772799; 22422496 - starting-at-height-13035299; 21461056 - starting-at-height-13297799; 20540840 - starting-at-height-13560299; 19660082 - starting-at-height-13822799; 18817090 - starting-at-height-14085299; 18010244 - starting-at-height-14347799; 17237994 - starting-at-height-14610299; 16498858 - starting-at-height-14872799; 15791412 - starting-at-height-15135299; 15114302 - starting-at-height-15397799; 14466226 - starting-at-height-15660299; 13845938 - starting-at-height-15922799; 13252246 - starting-at-height-16185299; 12684012 - starting-at-height-16447799; 12140142 - starting-at-height-16710299; 11619592 - starting-at-height-16972799; 11121364 - starting-at-height-17235299; 10644498 - starting-at-height-17497799; 10188078 - starting-at-height-17760299; 9751230 - starting-at-height-18022799; 9333114 - starting-at-height-18285299; 8932924 - starting-at-height-18547799; 8549896 - starting-at-height-18810299; 8183290 - starting-at-height-19072799; 7832404 - starting-at-height-19335299; 7496562 - starting-at-height-19597799; 7175122 - starting-at-height-19860299; 6867464 - starting-at-height-20122799; 6573000 - starting-at-height-20385299; 6291160 - starting-at-height-20647799; 6021404 - starting-at-height-20910299; 5763216 - starting-at-height-21172799; 5516100 - starting-at-height-21435299; 5279578 - starting-at-height-21697799; 5053198 - starting-at-height-21960299; 4836526 - starting-at-height-22222799; 4629144 - starting-at-height-22485299; 4430652 - starting-at-height-22747799; 4240674 - starting-at-height-23010299; 4058840 - starting-at-height-23272799; 3884804 - starting-at-height-23535299; 3718230 - starting-at-height-23797799; 3558798 - starting-at-height-24060299; 3406202 - starting-at-height-24322799; 3260150 - starting-at-height-24585299; 3120360 - starting-at-height-24847799; 2986564 - starting-at-height-25110299; 2858506 - starting-at-height-25372799; 2735938 - starting-at-height-25635299; 2618624 - starting-at-height-25897799; 2506342 - starting-at-height-26160299; 2398874 - starting-at-height-26422799; 2296014 - starting-at-height-26685299; 2197564 - starting-at-height-26947799; 2103336 - starting-at-height-27210299; 2013150 - starting-at-height-27472799; 1926828 - starting-at-height-27735299; 1844210 - starting-at-height-27997799; 1765132 - starting-at-height-28260299; 1689446 - starting-at-height-28522799; 1617006 - starting-at-height-28785299; 1547672 - starting-at-height-29047799; 1481310 - starting-at-height-29310299; 1417794 - starting-at-height-29572799; 1357000 - starting-at-height-29835299; 1298814 - starting-at-height-30097799; 1243124 - starting-at-height-30360299; 1189820 - starting-at-height-30622799; 1138802 - starting-at-height-30885299; 1089972 - starting-at-height-31147799; 1043236 - starting-at-height-31410299; 998504 - starting-at-height-31672799; 955690 - starting-at-height-31935299; 914712 - starting-at-height-32197799; 875490 - starting-at-height-32460299; 837950 - starting-at-height-32722799; 802020 - starting-at-height-32985299; 767630 - starting-at-height-33247799; 734716 - starting-at-height-33510299; 703212 - starting-at-height-33772799; 673060 - starting-at-height-34035299; 644200 - starting-at-height-34297799; 616578 - starting-at-height-34560299; 590140 - starting-at-height-34822799; 564836 - starting-at-height-35085299; 540616 - starting-at-height-35347799; 517436 - starting-at-height-35610299; 495248 - starting-at-height-35872799; 474014 - starting-at-height-36135299; 453688 - starting-at-height-36397799; 434234 - starting-at-height-36660299; 415616 - starting-at-height-36922799; 397794 - starting-at-height-37185299; 380738 - starting-at-height-37447799; 364412 - starting-at-height-37710299; 348786 - starting-at-height-37972799; 333832 - starting-at-height-38235299; 319518 - starting-at-height-38497799; 305816 - starting-at-height-38760299; 292704 - starting-at-height-39022799; 280154 - starting-at-height-39285299; 268140 - starting-at-height-39547799; 256644 - starting-at-height-39810299; 245638 - starting-at-height-40072799; 235106 - starting-at-height-40335299; 225026 - starting-at-height-40597799; 215376 - starting-at-height-40860299; 206142 - starting-at-height-41122799; 197302 - starting-at-height-41385299; 188842 - starting-at-height-41647799; 180744 - starting-at-height-41910299; 172994 - starting-at-height-42172799; 165578 - starting-at-height-42435299; 158478 - starting-at-height-42697799; 151682 - starting-at-height-42960299; 145178 - starting-at-height-43222799; 138954 - starting-at-height-43485299; 132994 - starting-at-height-43747799; 127292 - starting-at-height-44010299; 121834 - starting-at-height-44272799; 116610 - starting-at-height-44535299; 111610 - starting-at-height-44797799; 106824 - starting-at-height-45060299; 102244 - starting-at-height-45322799; 97860 - starting-at-height-45585299; 93664 - starting-at-height-45847799; 89648 - starting-at-height-46110299; 85804 - starting-at-height-46372799; 82124 - starting-at-height-46635299; 78602 - starting-at-height-46897799; 75232 - starting-at-height-47160299; 72006 - starting-at-height-47422799; 68920 - starting-at-height-47685299; 65964 - starting-at-height-47947799; 63136 - starting-at-height-48210299; 60428 - starting-at-height-48472799; 57838 - starting-at-height-48735299; 55358 - starting-at-height-48997799; 52984 - starting-at-height-49260299; 50712 - starting-at-height-49522799; 48538 - starting-at-height-49785299; 46456 - starting-at-height-50047799; 44464 - starting-at-height-50310299; 42558 - starting-at-height-50572799; 40732 - starting-at-height-50835299; 38986 - starting-at-height-51097799; 37314 - starting-at-height-51360299; 35714 - starting-at-height-51622799; 34182 - starting-at-height-51885299; 32716 - starting-at-height-52147799; 31314 - starting-at-height-52410299; 29972 - starting-at-height-52672799; 28686 - starting-at-height-52935299; 27456 - starting-at-height-53197799; 26278 - starting-at-height-53460299; 25152 - starting-at-height-53722799; 24074 - starting-at-height-53985299; 23042 - starting-at-height-54247799; 22054 - starting-at-height-54510299; 21108 - starting-at-height-54772799; 20202 - starting-at-height-55035299; 19336 - starting-at-height-55297799; 18506 - starting-at-height-55560299; 17714 - starting-at-height-55822799; 16954 - starting-at-height-56085299; 16226 - starting-at-height-56347799; 15532 - starting-at-height-56610299; 14866 - starting-at-height-56872799; 14228 - starting-at-height-57135299; 13618 - starting-at-height-57397799; 13034 - starting-at-height-57660299; 12474 - starting-at-height-57922799; 11940 - starting-at-height-58185299; 11428 - starting-at-height-58447799; 10938 - starting-at-height-58710299; 10468 - starting-at-height-58972799; 10020 - starting-at-height-59235299; 9590 - starting-at-height-59497799; 9178 - starting-at-height-59760299; 8786 - starting-at-height-60022799; 8408 - starting-at-height-60285299; 8048 - starting-at-height-60547799; 7702 - starting-at-height-60810299; 7372 - starting-at-height-61072799; 7056 - starting-at-height-61335299; 6754 - starting-at-height-61597799; 6464 - starting-at-height-61860299; 6186 - starting-at-height-62122799; 5922 - starting-at-height-62385299; 5668 - starting-at-height-62647799; 5424 - starting-at-height-62910299; 5192 - starting-at-height-63172799; 4970 - starting-at-height-63435299; 4756 - starting-at-height-63697799; 4552 - starting-at-height-63960299; 4356 - starting-at-height-64222799; 4170 - starting-at-height-64485299; 3992 - starting-at-height-64747799; 3820 - starting-at-height-65010299; 3656 - starting-at-height-65272799; 3500 - starting-at-height-65535299; 3350 - starting-at-height-65797799; 3206 - starting-at-height-66060299; 3068 - starting-at-height-66322799; 2936 - starting-at-height-66585299; 2810 - starting-at-height-66847799; 2690 - starting-at-height-67110299; 2574 - starting-at-height-67372799; 2464 - starting-at-height-67635299; 2358 - starting-at-height-67897799; 2258 - starting-at-height-68160299; 2160 - starting-at-height-68422799; 2068 - starting-at-height-68685299; 1980 - starting-at-height-68947799; 1894 - starting-at-height-69210299; 1812 - starting-at-height-69472799; 1736 - starting-at-height-69735299; 1660 - starting-at-height-69997799; 1590 - starting-at-height-70260299; 1522 - starting-at-height-70522799; 1456 - starting-at-height-70785299; 1394 - starting-at-height-71047799; 1334 - starting-at-height-71310299; 1276 - starting-at-height-71572799; 1222 - starting-at-height-71835299; 1170 - starting-at-height-72097799; 1120 - starting-at-height-72360299; 1072 - starting-at-height-72622799; 1026 - starting-at-height-72885299; 982 - starting-at-height-73147799; 938 - starting-at-height-73410299; 898 - starting-at-height-73672799; 860 - starting-at-height-73935299; 824 - starting-at-height-74197799; 788 - starting-at-height-74460299; 754 - starting-at-height-74722799; 722 - starting-at-height-74985299; 690 - starting-at-height-75247799; 662 - starting-at-height-75510299; 632 - starting-at-height-75772799; 606 - starting-at-height-76035299; 580 - starting-at-height-76297799; 554 - starting-at-height-76560299; 530 - starting-at-height-76822799; 508 - starting-at-height-77085299; 486 - starting-at-height-77347799; 466 - starting-at-height-77610299; 446 - starting-at-height-77872799; 426 - starting-at-height-78135299; 408 - starting-at-height-78397799; 390 - starting-at-height-78660299; 374 - starting-at-height-78922799; 358 - starting-at-height-79185299; 342 - starting-at-height-79447799; 328 - starting-at-height-79710299; 314 - starting-at-height-79972799; 300 - starting-at-height-80235299; 286 - starting-at-height-80497799; 274 - starting-at-height-80760299; 262 - starting-at-height-81022799; 252 - starting-at-height-81285299; 240 - starting-at-height-81547799; 230 - starting-at-height-81810299; 220 - starting-at-height-82072799; 210 - starting-at-height-82335299; 202 - starting-at-height-82597799; 194 - starting-at-height-82860299; 184 - starting-at-height-83122799; 176 - starting-at-height-83385299; 170 - starting-at-height-83647799; 162 - starting-at-height-83910299; 154 - starting-at-height-84172799; 148 - starting-at-height-84435299; 142 - starting-at-height-84697799; 136 - starting-at-height-84960299; 130 - starting-at-height-85222799; 124 - starting-at-height-85485299; 118 - starting-at-height-85747799; 114 - starting-at-height-86010299; 108 - starting-at-height-86272799; 104 - starting-at-height-86535299; 100 - starting-at-height-86797799; 96 - starting-at-height-87060299; 92 - starting-at-height-87322799; 88 - starting-at-height-87585299; 84 - starting-at-height-87847799; 80 - starting-at-height-88110299; 76 - starting-at-height-88372799; 72 - starting-at-height-88635299; 70 - starting-at-height-88897799; 66 - starting-at-height-89160299; 64 - starting-at-height-89422799; 62 - starting-at-height-89685299; 58 - starting-at-height-89947799; 56 - starting-at-height-90210299; 54 - starting-at-height-90472799; 52 - starting-at-height-90735299; 48 - starting-at-height-90997799; 46 - starting-at-height-91260299; 44 - starting-at-height-91522799; 42 - starting-at-height-91785299; 40 - starting-at-height-92047799; 40 - starting-at-height-92310299; 38 - starting-at-height-92572799; 36 - starting-at-height-92835299; 34 - starting-at-height-93097799; 32 - starting-at-height-93360299; 32 - starting-at-height-93622799; 30 - starting-at-height-93885299; 28 - starting-at-height-94147799; 28 - starting-at-height-94410299; 26 - starting-at-height-94672799; 24 - starting-at-height-94935299; 24 - starting-at-height-95197799; 22 - starting-at-height-95460299; 22 - starting-at-height-95722799; 20 - starting-at-height-95985299; 20 - starting-at-height-96247799; 18 - starting-at-height-96510299; 18 - starting-at-height-96772799; 18 - starting-at-height-97035299; 16 - starting-at-height-97297799; 16 - starting-at-height-97560299; 14 - starting-at-height-97822799; 14 - starting-at-height-98085299; 14 - starting-at-height-98347799; 12 - starting-at-height-98610299; 12 - starting-at-height-98872799; 12 - starting-at-height-99135299; 12 - starting-at-height-99397799; 10 - starting-at-height-99660299; 10 - starting-at-height-99922799; 10 - starting-at-height-100185299; 10 - starting-at-height-100447799; 8 - starting-at-height-100710299; 8 - starting-at-height-100972799; 8 - starting-at-height-101235299; 8 - starting-at-height-101497799; 8 - starting-at-height-101760299; 6 - starting-at-height-102022799; 6 - starting-at-height-102285299; 6 - starting-at-height-102547799; 6 - starting-at-height-102810299; 6 - starting-at-height-103072799; 6 - starting-at-height-103335299; 6 - starting-at-height-103597799; 4 - starting-at-height-103860299; 4 - starting-at-height-104122799; 4 - starting-at-height-104385299; 4 - starting-at-height-104647799; 4 - starting-at-height-104910299; 4 - starting-at-height-105172799; 4 - starting-at-height-105435299; 4 - starting-at-height-105697799; 4 - starting-at-height-105960299; 2 - starting-at-height-106222799; 2 - starting-at-height-106485299; 2 - starting-at-height-106747799; 2 - starting-at-height-107010299; 2 - starting-at-height-107272799; 2 - starting-at-height-107535299; 2 - starting-at-height-107797799; 2 - starting-at-height-108060299; 2 - starting-at-height-108322799; 2 - starting-at-height-108585299; 2 - starting-at-height-108847799; 2 - starting-at-height-109110299; 2 - starting-at-height-109372799; 2 - starting-at-height-109635299; 2 - starting-at-height-109897799; 2 - starting-at-height-110160299; 1 - starting-at-height-110422799; 0 - -config-logging-broker.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_broker%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-recovery.properties -================================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_recovery%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-logging-server.properties -================================ -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **console**; - sinkType; Async - level; Info - colorMode; Ansi - **console.component.levels**; - **file**; - sinkType; Async - level; Info - directory; logs - filePattern; logs/catapult_server%4N.log - rotationSize; 25MB - maxTotalSize; 1000MB - minFreeSpace; 100MB - **file.component.levels**; - -config-messaging.properties -=========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **messaging**; - subscriberPort; 7902 - listenInterface; 0.0.0.0 - -config-network.properties -========================= -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **network**; ; ; - identifier; public-test; NetworkIdentifier; Network identifier. - nemesisSignerPublicKey; 2267B24107405779DDF0D8FBEABD8142B97105F356F3737B1FC02220E8F90FF2; Key; Nemesis public key. - nodeEqualityStrategy; host; NodeIdentityEqualityStrategy; Node equality strategy. - generationHashSeed; 3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155; ; - epochAdjustment; 1616694977s; utils::TimeSpan; Nemesis epoch time adjustment. - **chain**; ; ; - enableVerifiableState; true; bool; Set to true if block chain should calculate state hashes so that state is fully verifiable at each block. - enableVerifiableReceipts; true; bool; Set to true if block chain should calculate receipts so that state changes are fully verifiable at each block. - currencyMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used as primary chain currency. - harvestingMosaicId; 0x091F'837E'059A'E13C; MosaicId; Mosaic id used to provide harvesting ability. - blockGenerationTargetTime; 30s; utils::TimeSpan; Targeted time between blocks. - blockTimeSmoothingFactor; 3000; uint32_t; Note: A higher value makes the network more biased. Note: This can lower security because it will increase the influence of time relative to importance. - importanceGrouping; 180; uint64_t; Number of blocks that should be treated as a group for importance purposes. Note: Importances will only be calculated at blocks that are multiples of this grouping number. - importanceActivityPercentage; 5; uint8_t; Percentage of importance resulting from fee generation and beneficiary usage. - maxRollbackBlocks; 0; uint32_t; Maximum number of blocks that can be rolled back. - maxDifficultyBlocks; 60; uint32_t; Maximum number of blocks to use in a difficulty calculation. - defaultDynamicFeeMultiplier; 100; BlockFeeMultiplier; Default multiplier to use for dynamic fees. - maxTransactionLifetime; 6h; utils::TimeSpan; Maximum lifetime a transaction can have before it expires. - maxBlockFutureTime; 300ms; utils::TimeSpan; Maximum future time of a block that can be accepted. - initialCurrencyAtomicUnits; 7'842'928'625'000'000; Amount; Initial currency atomic units available in the network. - maxMosaicAtomicUnits; 8'999'999'999'000'000; Amount; Maximum atomic units (total-supply * 10 ^ divisibility) of a mosaic allowed in the network. - totalChainImportance; 7'842'928'625'000'000; Importance; Total whole importance units available in the network. - minHarvesterBalance; 10'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - maxHarvesterBalance; 50'000'000'000'000; Amount; Maximum number of harvesting mosaic atomic units needed for an account to be eligible for harvesting. - minVoterBalance; 3'000'000'000'000; Amount; Minimum number of harvesting mosaic atomic units needed for an account to be eligible for voting. - votingSetGrouping; 720; ; - maxVotingKeysPerAccount; 3; uint8_t; Maximum number of voting keys that can be registered at once per account. - minVotingKeyLifetime; 28; uint32_t; Minimum number of finalization rounds for which voting key can be registered. - maxVotingKeyLifetime; 720; uint32_t; Maximum number of finalization rounds for which voting key can be registered. - harvestBeneficiaryPercentage; 25; uint8_t; Percentage of the harvested fee that is collected by the beneficiary account. - harvestNetworkPercentage; 5; uint8_t; Percentage of the harvested fee that is collected by the network. - harvestNetworkFeeSinkAddress; TCZ3UZPWWC5NR6TGGYEJ2MT4Z5ZLR3XTIVI4RHA; Address; Address of the harvest network fee sink account. - maxTransactionsPerBlock; 6'000; uint32_t; Maximum number of transactions per block. - **plugin:catapult.plugins.accountlink**; - dummy; to trigger plugin load - **plugin:catapult.plugins.aggregate**; ; ; - maxTransactionsPerAggregate; 100; uint32_t; Maximum number of transactions per aggregate. - maxCosignaturesPerAggregate; 25; uint8_t; Maximum number of cosignatures per aggregate. - enableStrictCosignatureCheck; false; bool; Set to true if cosignatures must exactly match component signers. Set to false if cosignatures should be validated externally. - enableBondedAggregateSupport; true; bool; Set to true if bonded aggregates should be allowed. Set to false if bonded aggregates should be rejected. - maxBondedTransactionLifetime; 48h; utils::TimeSpan; Maximum lifetime a bonded transaction can have before it expires. - **plugin:catapult.plugins.lockhash**; ; ; - lockedFundsPerAggregate; 10'000'000; Amount; Amount that has to be locked per aggregate in partial cache. - maxHashLockDuration; 2d; utils::BlockSpan; Maximum number of blocks for which a hash lock can exist. - **plugin:catapult.plugins.locksecret**; ; ; - maxSecretLockDuration; 365d; utils::BlockSpan; Maximum number of blocks for which a secret lock can exist. - minProofSize; 0; uint16_t; Minimum size of a proof in bytes. - maxProofSize; 1024; uint16_t; Maximum size of a proof in bytes. - **plugin:catapult.plugins.metadata**; ; ; - maxValueSize; 1024; uint16_t; Maximum metadata value size. - **plugin:catapult.plugins.mosaic**; ; ; - maxMosaicsPerAccount; 1'000; uint16_t; Maximum number of mosaics that an account can own. - maxMosaicDuration; 3650d; utils::BlockSpan; Maximum mosaic duration. - maxMosaicDivisibility; 6; uint8_t; Maximum mosaic divisibility. - mosaicRentalFeeSinkAddress; TAFNXW3VXVFTGTVGATKQAR75ALQX7DQXQJRWWTA; Address; Address of the mosaic rental fee sink account. - mosaicRentalFee; 500000; Amount; Mosaic rental fee. - **plugin:catapult.plugins.multisig**; ; ; - maxMultisigDepth; 3; uint8_t; Maximum number of multisig levels. - maxCosignatoriesPerAccount; 25; uint32_t; Maximum number of cosignatories per account. - maxCosignedAccountsPerAccount; 25; uint32_t; Maximum number of accounts a single account can cosign. - **plugin:catapult.plugins.namespace**; ; ; - maxNameSize; 64; uint8_t; Maximum namespace name size. - maxChildNamespaces; 100; uint16_t; Maximum number of children for a root namespace. - maxNamespaceDepth; 3; uint8_t; Maximum namespace depth. - minNamespaceDuration; 30d; utils::BlockSpan; Minimum namespace duration. - maxNamespaceDuration; 1825d; utils::BlockSpan; Maximum namespace duration. - namespaceGracePeriodDuration; 1d; utils::BlockSpan; Grace period during which time only the previous owner can renew an expired namespace. - reservedRootNamespaceNames; symbol, symbl, xym, xem, nem, user, account, org, com, biz, net, edu, mil, gov, info; unordered_set; Reserved root namespaces that cannot be claimed. - namespaceRentalFeeSinkAddress; TATBDUEWS2X2BKKBPVB7SY4Z626YCAERGA3IF5A; Address; Address of the namespace rental fee sink account. - rootNamespaceRentalFeePerBlock; 2; Amount; Root namespace rental fee per block. - childNamespaceRentalFee; 100000; Amount; Child namespace rental fee. - **plugin:catapult.plugins.restrictionaccount**; ; ; - maxAccountRestrictionValues; 100; uint16_t; Maximum number of account restriction values. - **plugin:catapult.plugins.restrictionmosaic**; ; ; - maxMosaicRestrictionValues; 20; uint8_t; Maximum number of mosaic restriction values. - **plugin:catapult.plugins.transfer**; ; ; - maxMessageSize; 1024; uint16_t; Maximum transaction message size. - -config-node.properties -====================== -.. csv-table:: - :header: "Property", "Value", "Type", "Description" - :delim: ; - - **node**; ; ; - port; 7900; unsigned short; Server port. - maxIncomingConnectionsPerIdentity; 6; uint32_t; Maximum number of incoming connections per identity over primary port. - enableAddressReuse; false; bool; Set to true if the server should reuse ports already in use. - enableSingleThreadPool; false; bool; Set to true if a single thread pool should be used, Set to false if multiple thread pools should be used. - enableCacheDatabaseStorage; true; bool; Set to true if cache data should be saved in a database. - enableAutoSyncCleanup; true; bool; Set to true if temporary sync files should be automatically cleaned up. Note: This should be Set to false if broker process is running. - fileDatabaseBatchSize; 100; ; - enableTransactionSpamThrottling; true; bool; Set to true if transaction spam throttling should be enabled. - transactionSpamThrottlingMaxBoostFee; 10'000'000; Amount; Maximum fee that will boost a transaction through the spam throttle when spam throttling is enabled. - maxHashesPerSyncAttempt; 370; ; - maxBlocksPerSyncAttempt; 360; uint32_t; Maximum number of blocks per sync attempt. - maxChainBytesPerSyncAttempt; 100MB; utils::FileSize; Maximum chain bytes per sync attempt. - shortLivedCacheTransactionDuration; 10m; utils::TimeSpan; Duration of a transaction in the short lived cache. - shortLivedCacheBlockDuration; 100m; utils::TimeSpan; Duration of a block in the short lived cache. - shortLivedCachePruneInterval; 90s; utils::TimeSpan; Time between short lived cache pruning. - shortLivedCacheMaxSize; 10'000'000; uint32_t; Maximum size of a short lived cache. - minFeeMultiplier; 100; BlockFeeMultiplier; Minimum fee multiplier of transactions to propagate and include in blocks. - maxTimeBehindPullTransactionsStart; 5m; ; - transactionSelectionStrategy; oldest; model::TransactionSelectionStrategy; Transaction selection strategy used for syncing and harvesting unconfirmed transactions. - unconfirmedTransactionsCacheMaxResponseSize; 5MB; utils::FileSize; Maximum size of an unconfirmed transactions response. - unconfirmedTransactionsCacheMaxSize; 20MB; uint32_t; Maximum size of the unconfirmed transactions cache. - connectTimeout; 15s; utils::TimeSpan; Timeout for connecting to a peer. - syncTimeout; 5m; utils::TimeSpan; Timeout for syncing with a peer. - socketWorkingBufferSize; 16KB; utils::FileSize; Initial socket working buffer size (socket reads will attempt to read buffers of roughly this size). - socketWorkingBufferSensitivity; 1; uint32_t; Socket working buffer sensitivity (lower values will cause memory to be more aggressively reclaimed). Note: Set to 0 will disable memory reclamation. - maxPacketDataSize; 150MB; utils::FileSize; Maximum packet data size. - blockDisruptorSlotCount; 4096; uint32_t; Size of the block disruptor circular buffer. - blockElementTraceInterval; 1; uint32_t; Multiple of elements at which a block element should be traced through queue and completion. - blockDisruptorMaxMemorySize; 300MB; ; - transactionDisruptorSlotCount; 8192; uint32_t; Size of the transaction disruptor circular buffer. - transactionElementTraceInterval; 10; uint32_t; Multiple of elements at which a transaction element should be traced through queue and completion. - transactionDisruptorMaxMemorySize; 20MB; ; - enableDispatcherAbortWhenFull; false; bool; Set to true if the process should terminate when any dispatcher is full. - enableDispatcherInputAuditing; false; bool; Set to true if all dispatcher inputs should be audited. - maxTrackedNodes; 5'000; uint32_t; Maximum number of nodes to track in memory. - minPartnerNodeVersion; 1.0.0.0; ; - maxPartnerNodeVersion; 1.0.255.255; ; - trustedHosts; 127.0.0.1; unordered_set; Trusted hosts that are allowed to execute protected API calls on this node. - localNetworks; 127.0.0.1; unordered_set; Networks that should be treated as local. - listenInterface; 0.0.0.0; ; - **cache_database**; - enableStatistics; false - maxOpenFiles; 0 - maxBackgroundThreads; 0 - maxSubcompactionThreads; 0 - blockCacheSize; 0MB - memtableMemoryBudget; 0MB - maxWriteBatchSize; 5MB - **localnode**; ; ; - host; ; string; Node host (leave empty to auto-detect IP). - friendlyName; myFriendlyName; string; Node friendly name (leave empty to use address). - version; 1.0.1.0; uint32_t; Node version. - roles; Peer,Voting; ionet::NodeRoles; Node roles. - **outgoing_connections**; ; ; - maxConnections; 10; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - **incoming_connections**; ; ; - maxConnections; 512; uint16_t; Maximum number of active connections. - maxConnectionAge; 200; uint16_t; Maximum connection age. - maxConnectionBanAge; 20; uint16_t; Maximum connection ban age. - numConsecutiveFailuresBeforeBanning; 3; uint16_t; Number of consecutive connection failures before a connection is banned. - backlogSize; 512; uint16_t; Maximum size of the pending connections queue. - **banning**; ; ; - defaultBanDuration; 12h; utils::TimeSpan; Default duration for banning. - maxBanDuration; 12h; utils::TimeSpan; Maximum duration for banning. - keepAliveDuration; 48h; utils::TimeSpan; Duration to keep account in container after the ban expired. - maxBannedNodes; 5'000; uint32_t; Maximum number of banned nodes. - numReadRateMonitoringBuckets; 4; uint16_t; Number of read rate monitoring buckets (Set to 0 to disable read rate monitoring). - readRateMonitoringBucketDuration; 15s; utils::TimeSpan; Duration of each read rate monitoring bucket. - maxReadRateMonitoringTotalSize; 100MB; utils::FileSize; Maximum size allowed during full read rate monitoring period. - minTransactionFailuresCountForBan; 8; ; - minTransactionFailuresPercentForBan; 10; ; - -config-pt.properties -==================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **partialtransactions**; - cacheMaxResponseSize; 5MB - cacheMaxSize; 20MB - -config-task.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **logging task**; - startDelay; 1m - repeatDelay; 10m - **connect peers task for service Finalization**; - startDelay; 2s - repeatDelay; 1m - **finalization task**; - startDelay; 2m - repeatDelay; 15s - **pull finalization messages task**; - startDelay; 3s - repeatDelay; 1s - **pull finalization proof task**; - startDelay; 10s - repeatDelay; 50s - **harvesting task**; - startDelay; 30s - repeatDelay; 1s - **network chain height detection**; - startDelay; 1s - repeatDelay; 15s - **node discovery peers task**; - startDelay; 1m - minDelay; 1m - maxDelay; 10m - numPhaseOneRounds; 10 - numTransitionRounds; 20 - **node discovery ping task**; - startDelay; 2m - repeatDelay; 5m - **age peers task for service Readers**; - startDelay; 1m - repeatDelay; 1m - **batch partial transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Pt**; - startDelay; 3s - repeatDelay; 1m - **pull partial transactions task**; - startDelay; 10s - repeatDelay; 3s - **batch transaction task**; - startDelay; 500ms - repeatDelay; 500ms - **connect peers task for service Sync**; - startDelay; 1s - repeatDelay; 1m - **pull unconfirmed transactions task**; - startDelay; 4s - repeatDelay; 3s - **synchronizer task**; - startDelay; 3s - repeatDelay; 3s - **time synchronization task**; - startDelay; 1m - minDelay; 3m - maxDelay; 180m - numPhaseOneRounds; 5 - numTransitionRounds; 10 - **static node refresh task**; - startDelay; 5ms - minDelay; 15s - maxDelay; 24h - numPhaseOneRounds; 20 - numTransitionRounds; 20 - -config-timesync.properties -========================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **timesynchronization**; - maxNodes; 20 - minImportance; 10'000'000'000 - -config-user.properties -====================== -.. csv-table:: - :header: "Property", "Value" - :delim: ; - - **account**; - enableDelegatedHarvestersAutoDetection; true - **storage**; - seedDirectory; ./seed - certificateDirectory; ./cert - dataDirectory; ./data - pluginsDirectory; /usr/catapult/lib - votingKeysDirectory; ./votingkeys diff --git a/test/service/AgentCertificateService.test.ts b/test/service/AgentCertificateService.test.ts deleted file mode 100644 index c4c0d2dbd..000000000 --- a/test/service/AgentCertificateService.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2021 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from 'chai'; -import { promises as fsPromises, readFileSync } from 'fs'; -import 'mocha'; -import { join } from 'path'; -import { AgentCertificateService, BootstrapUtils, ConfigLoader, Preset } from '../../src/service'; - -describe('AgentCertificateService', () => { - it('createCertificate', async () => { - const target = 'target/tests/AgentCertificateService'; - await BootstrapUtils.deleteFolder(target); - await BootstrapUtils.mkdir(target); - const service = new AgentCertificateService('.', { target: target, user: await BootstrapUtils.getDockerUserGroup() }); - - const presetData = new ConfigLoader().createPresetData({ - root: '.', - preset: Preset.bootstrap, - password: 'abc', - }); - - await service.run( - presetData.networkType, - presetData.symbolServerImage, - 'supernode', - { - agent: { - privateKey: '8D1929CAC89295BE7DBE26B7F830AA42A74D75D7055117DF2973001E3271BDD9', - publicKey: '04794EE7BD0810057870C7739C985D42BB4AAA4B1B9E3A71BFE6373A72D63726', - }, - }, - target, - ); - - const files = await fsPromises.readdir(target); - expect(files).deep.eq([ - 'agent-ca.cnf', - 'agent-ca.csr.pem', - 'agent-ca.key.pem', - 'agent-ca.pubkey.pem', - 'agent-comm.cnf', - 'index.txt', - 'metadata.yml', - 'new_certs', - ]); - - files - .filter((f) => f != 'new_certs') - .forEach((f) => { - expect(readFileSync(join(target, f))).deep.eq(readFileSync(join('test', 'agentCertificates', f))); - }); - }); -}); diff --git a/test/service/BootstrapServce.e2e.ts b/test/service/BootstrapServce.e2e.ts deleted file mode 100644 index 3ede80276..000000000 --- a/test/service/BootstrapServce.e2e.ts +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from '@oclif/test'; -import 'mocha'; -import { Account, Deadline, PlainMessage, RepositoryFactoryHttp, TransactionService, TransferTransaction, UInt64 } from 'symbol-sdk'; -import { BootstrapService, BootstrapUtils, ConfigLoader, ConfigResult, ConfigService, Preset, StartParams } from '../../src/service'; - -describe('BootstrapService', () => { - const timeout = 60000; - - //TODO Fix the transfer test! - async function transferTest(configResult: ConfigResult): Promise { - const repositoryFactory = new RepositoryFactoryHttp('http://localhost:3000'); - const networkType = await repositoryFactory.getNetworkType().toPromise(); - const generationHash = await repositoryFactory.getGenerationHash().toPromise(); - - const nemesisAccounts = configResult.addresses?.mosaics?.[0].accounts.map((n) => n.privateKey); - if (!nemesisAccounts || !nemesisAccounts[0]) { - throw new Error('Nemesis accounts could not be loaded!'); - } - const account = Account.createFromPrivateKey(nemesisAccounts[0], networkType); - - const listener = repositoryFactory.createListener(); - try { - await listener.open(); - const transactionService = new TransactionService( - repositoryFactory.createTransactionRepository(), - repositoryFactory.createReceiptRepository(), - ); - const { currency } = await repositoryFactory.getCurrencies().toPromise(); - const mosaic = currency.createRelative(10); - - const maxFee = UInt64.fromUint(10000000); - - const recipient = Account.generateNewAccount(networkType); - - const epochAdjustment = await repositoryFactory.getEpochAdjustment().toPromise(); - const transferTransaction = TransferTransaction.create( - Deadline.create(epochAdjustment), - recipient.address, - [mosaic], - PlainMessage.create('test-message'), - networkType, - maxFee, - ); - await BootstrapUtils.sleep(100); - const signedTransaction = account.sign(transferTransaction, generationHash); - console.log(`Announcing transaction hash http://localhost:3000/transactions/unconfirmed/${signedTransaction.hash}`); - const announcedTransaction = await transactionService.announce(signedTransaction, listener).toPromise(); - console.log('Confirmed!!!'); - expect(announcedTransaction.signer?.address.plain()).eq(account.publicAccount.address.plain()); - } finally { - if (listener.isOpen()) { - await listener.close(); - } - } - } - async function basicTestNetwork(configResult: ConfigResult): Promise { - const repositoryFactory = new RepositoryFactoryHttp('http://localhost:3000'); - const networkType = await repositoryFactory.getNetworkType().toPromise(); - const generationHash = await repositoryFactory.getGenerationHash().toPromise(); - expect(configResult.presetData).not.null; - expect(configResult.addresses).not.null; - expect(configResult.addresses.networkType).eq(networkType); - expect(configResult.presetData.networkType).eq(networkType); - expect(configResult.addresses.nemesisGenerationHashSeed).eq(generationHash); - expect(configResult.presetData.nemesisGenerationHashSeed).eq(generationHash); - } - - it('bootstrap start', async () => { - const service = new BootstrapService(); - const config: StartParams = { - ...ConfigService.defaultParams, - preset: Preset.bootstrap, - reset: true, - timeout, - pullImages: true, - healthCheck: true, - target: 'target/tests/bootstrap-test', - detached: true, - user: BootstrapUtils.CURRENT_USER, - }; - await service.stop(config); - const configResult = await service.start(config); - try { - await basicTestNetwork(configResult); - } finally { - await service.stop(config); - } - }); - - it('bootstrap light', async () => { - const service = new BootstrapService(); - const config: StartParams = { - ...ConfigService.defaultParams, - preset: Preset.bootstrap, - assembly: 'light', - reset: true, - timeout, - healthCheck: true, - pullImages: true, - target: 'target/tests/light-test', - detached: true, - user: BootstrapUtils.CURRENT_USER, - }; - try { - await service.stop(config); - const configResult = await service.start(config); - await basicTestNetwork(configResult); - } finally { - await service.stop(config); - } - }); - - it('testnet dual', async () => { - const service = new BootstrapService(); - const config: StartParams = { - ...ConfigService.defaultParams, - preset: Preset.testnet, - assembly: 'dual', - reset: true, - timeout, - healthCheck: true, - pullImages: true, - target: 'target/tests/testnet-dual', - detached: true, - user: BootstrapUtils.CURRENT_USER, - }; - try { - await service.stop(config); - const configResult = await service.start(config); - await basicTestNetwork(configResult); - } finally { - await service.stop(config); - } - }); - - it('mainnet dual', async () => { - const service = new BootstrapService(); - const config: StartParams = { - ...ConfigService.defaultParams, - preset: Preset.mainnet, - assembly: 'dual', - reset: true, - timeout, - healthCheck: true, - pullImages: true, - target: 'target/tests/mainnet-dual', - detached: true, - user: BootstrapUtils.CURRENT_USER, - }; - try { - await service.stop(config); - const configResult = await service.start(config); - await basicTestNetwork(configResult); - } finally { - await service.stop(config); - } - }); - - // For some reason transfer test works in this test. - it.skip('Basic Test Running Network', async () => { - const loader = new ConfigLoader(); - const target = 'target/tests/bootstrap-test'; - const presetData = loader.loadExistingPresetData(target, false); - const addresses = loader.loadExistingAddresses(target, false); - // Here you can write unit tests against a localhost:3000 network - const configResult = { presetData, addresses }; - await basicTestNetwork(configResult); - await transferTest(configResult); - }); -}); diff --git a/test/service/BootstrapServce.test.ts b/test/service/BootstrapServce.test.ts deleted file mode 100644 index 25f50f631..000000000 --- a/test/service/BootstrapServce.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from '@oclif/test'; -import 'mocha'; -import { BootstrapService, Preset, StartParams } from '../../src/service'; - -describe('BootstrapService', () => { - it(' bootstrap config compose non aws', async () => { - const service = new BootstrapService(); - const config: StartParams = { - report: false, - preset: Preset.bootstrap, - reset: true, - upgrade: false, - timeout: 60000 * 5, - target: 'target/tests/BootstrapService.standard', - detached: true, - user: 'current', - }; - - const configResult = await service.config(config); - expect(configResult.presetData).to.not.null; - expect(configResult.addresses).to.not.null; - const dockerCompose = await service.compose(config); - expect(dockerCompose).to.not.undefined; - }); -}); diff --git a/test/service/CertificateService.test.ts b/test/service/CertificateService.test.ts deleted file mode 100644 index 27e73035a..000000000 --- a/test/service/CertificateService.test.ts +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from '@oclif/test'; -import { deepStrictEqual } from 'assert'; -import { promises as fsPromises, readFileSync } from 'fs'; -import 'mocha'; -import { join } from 'path'; -import * as sshpk from 'sshpk'; -import { Account, Convert, NetworkType } from 'symbol-sdk'; -import { - BootstrapUtils, - CertificateMetadata, - CertificateService, - ConfigLoader, - ForgeCertificateService, - NodeCertificates, - Preset, -} from '../../src/service'; - -describe('CertificateService', () => { - it('forge create certificate', async () => { - await BootstrapUtils.deleteFolder('./target/tests/unitTests'); - const service = new ForgeCertificateService({ target: './target/tests/unitTests' }); - await service.run('peer-node'); - }); - - it('getCertificates from output', async () => { - const outputFile = `./test/certificates/output.txt`; - const output = BootstrapUtils.loadFileAsText(outputFile); - const certificates = CertificateService.getCertificates(output); - deepStrictEqual(certificates, [ - { - privateKey: '7B63F86AF5E33617C349832012F42FAC0102001A705E4842D0F615B1BA1C98A2', - publicKey: 'D22DBD053E6913005DE2E59A3907C88CD6AB081B8BC1AC26EE24BDEB09B8BDA2', - }, - { - privateKey: '6ED4C590110285572FB60F1F2ADF50F2DF96991B0A72E86241B2D44B4CE7E696', - publicKey: '5F4F8760D675F6836D4C07576F88B179BFE4471EDFBA4ECD2399C8F1EF02EE71', - }, - ]); - }); - - it('parse public key', async () => { - const nodeCertKey: any = sshpk.parseKey( - '-----BEGIN PUBLIC KEY-----\n' + - 'MCowBQYDK2VwAyEAxpp0FX4tsApDzLYEAH2MNDItqWk2/fnhwAeTj0cT/qk=\n' + - '-----END PUBLIC KEY-----\n', - 'pem', - ); - const publicKey = Convert.uint8ToHex(nodeCertKey.parts[0].data); - expect('C69A74157E2DB00A43CCB604007D8C34322DA96936FDF9E1C007938F4713FEA9').be.eq(publicKey); - console.log(publicKey); - }); - - it('createCertificates', async () => { - const target = 'target/tests/CertificateService.test'; - await BootstrapUtils.deleteFolder(target); - const service = new CertificateService('.', { target: target, user: await BootstrapUtils.getDockerUserGroup() }); - const presetData = new ConfigLoader().createPresetData({ - root: '.', - preset: Preset.bootstrap, - password: 'abc', - }); - const networkType = NetworkType.TEST_NET; - const keys: NodeCertificates = { - main: ConfigLoader.toConfig( - Account.createFromPrivateKey('E095162875BB1D98CA5E0941670E01C1B0DBDF86DF7B3BEDA4A93635F8E51A03', networkType), - ), - transport: ConfigLoader.toConfig( - Account.createFromPrivateKey('415F253ABF0FB2DFD39D7F409EFA2E88769873CAEB45617313B98657A1476A15', networkType), - ), - }; - - const randomSerial = '4C87E5C49034B711E2DA38D116366829DA144B\n'.toLowerCase(); - await service.run(networkType, presetData.symbolServerImage, 'test-node', keys, target, randomSerial); - - const expectedMetadata: CertificateMetadata = { - version: 1, - transportPublicKey: keys.transport.publicKey, - mainPublicKey: keys.main.publicKey, - }; - expect(expectedMetadata).deep.eq(BootstrapUtils.loadYaml(join(target, 'metadata.yml'), false)); - - const files = await fsPromises.readdir(target); - expect(files).deep.eq([ - 'ca.cert.pem', - 'ca.cnf', - 'ca.pubkey.pem', - 'index.txt', - 'index.txt.attr', - 'index.txt.attr.old', - 'index.txt.old', - 'metadata.yml', - 'new_certs', - 'node.cnf', - 'node.crt.pem', - 'node.csr.pem', - 'node.full.crt.pem', - 'node.key.pem', - 'serial.dat', - 'serial.dat.old', - ]); - - const diffFiles = ['new_certs', 'ca.cert.pem', 'index.txt', 'node.crt.pem', 'node.full.crt.pem']; - - // Filtering out files that aren't the same - files - .filter((f) => diffFiles.indexOf(f) === -1) - .forEach((f) => { - expect(readFileSync(join(target, f)), `Different fields: ${f}`).deep.eq(readFileSync(join('test', 'nodeCertificates', f))); - }); - }); -}); diff --git a/test/service/ComposeService.test.ts b/test/service/ComposeService.test.ts deleted file mode 100644 index 2a831824b..000000000 --- a/test/service/ComposeService.test.ts +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from '@oclif/test'; -import { existsSync } from 'fs'; -import 'mocha'; -import { join } from 'path'; -import { DockerCompose } from '../../src/model'; -import { BootstrapUtils, ComposeService, ConfigLoader, ConfigService, LinkService, Preset, StartParams } from '../../src/service'; - -describe('ComposeService', () => { - const password = '1234'; - - const assertDockerCompose = async (params: StartParams, expectedComposeFile: string) => { - const root = '.'; - const presetData = new ConfigLoader().createPresetData({ root, password, ...params }); - const dockerCompose = await new ComposeService(root, params).run(presetData); - Object.values(dockerCompose.services).forEach((service) => { - if (service.mem_limit) { - service.mem_limit = 123; - } - }); - const targetDocker = join(params.target, `docker`, 'docker-compose.yml'); - expect(existsSync(targetDocker)).to.be.true; - const expectedFileLocation = `./test/composes/${expectedComposeFile}`; - if (!existsSync(expectedFileLocation)) { - await BootstrapUtils.writeYaml(expectedFileLocation, dockerCompose, params.password); - } - - const expectedDockerCompose: DockerCompose = BootstrapUtils.loadYaml(expectedFileLocation, params.password); - - const promises = Object.values(expectedDockerCompose.services).map(async (service) => { - if (!service.user) { - return service; - } - const user = await BootstrapUtils.getDockerUserGroup(); - if (user) { - service.user = user; - } else { - delete service.user; - } - return service; - }); - await Promise.all(promises); - expect( - dockerCompose, - `Generated Docker Compose: - -${BootstrapUtils.toYaml(dockerCompose)} - -`, - ).to.be.deep.eq(expectedDockerCompose); - BootstrapUtils.deleteFolder(params.target); - }; - - it('Compose testnet dual', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - target: 'target/tests/testnet-dual', - password, - reset: false, - preset: Preset.testnet, - assembly: 'dual', - }; - await assertDockerCompose(params, 'expected-testnet-dual-compose.yml'); - }); - - it('Compose testnet api', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - target: 'target/tests/testnet-api', - password, - reset: false, - preset: Preset.testnet, - assembly: 'api', - }; - await assertDockerCompose(params, 'expected-testnet-api-compose.yml'); - }); - - it('Compose testnet peer', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - target: 'target/tests/testnet-peer', - password, - reset: false, - preset: Preset.testnet, - assembly: 'peer', - }; - await assertDockerCompose(params, 'expected-testnet-peer-compose.yml'); - }); - - it('Compose mainnet dual', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - target: 'target/tests/mainnet-dual', - password, - reset: false, - preset: Preset.mainnet, - assembly: 'dual', - }; - await assertDockerCompose(params, 'expected-mainnet-dual-compose.yml'); - }); - - it('Compose mainnet api', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - target: 'target/tests/mainnet-api', - password, - reset: false, - preset: Preset.mainnet, - assembly: 'api', - }; - await assertDockerCompose(params, 'expected-mainnet-api-compose.yml'); - }); - - it('Compose mainnet peer', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - target: 'target/tests/mainnet-peer', - password, - reset: false, - preset: Preset.mainnet, - assembly: 'peer', - }; - await assertDockerCompose(params, 'expected-mainnet-peer-compose.yml'); - }); - - it('Compose testnet supernode', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - target: 'target/tests/testnet-supernode', - password, - customPreset: './test/unit-test-profiles/supernode.yml', - reset: false, - preset: Preset.testnet, - assembly: 'dual', - }; - await assertDockerCompose(params, 'expected-testnet-supernode-compose.yml'); - }); - - it('Compose testnet dual voting', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - target: 'target/tests/ComposeService-testnet-voting', - password, - reset: false, - customPreset: './test/unit-test-profiles/voting_preset.yml', - preset: Preset.testnet, - assembly: 'dual', - }; - await assertDockerCompose(params, 'expected-testnet-voting-compose.yml'); - }); - - it('Compose bootstrap default', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - customPresetObject: { - faucets: [ - { - environment: { FAUCET_PRIVATE_KEY: 'MockMe', NATIVE_CURRENCY_ID: 'Mockme2' }, - }, - ], - }, - target: 'target/tests/ComposeService-bootstrap.default', - reset: false, - preset: Preset.bootstrap, - }; - await assertDockerCompose(params, 'expected-docker-compose-bootstrap.yml'); - }); - - it('Compose bootstrap custom compose', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - customPresetObject: { - faucets: [ - { - environment: { FAUCET_PRIVATE_KEY: 'MockMe', NATIVE_CURRENCY_ID: 'Mockme2' }, - }, - ], - }, - target: 'target/tests/ComposeService-bootstrap.compose', - password, - customPreset: './test/custom_compose_preset.yml', - reset: false, - preset: Preset.bootstrap, - }; - await assertDockerCompose(params, 'expected-docker-compose-bootstrap-custom-compose.yml'); - }); - - it('Compose bootstrap custom preset', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - customPresetObject: { - faucets: [ - { - environment: { FAUCET_PRIVATE_KEY: 'MockMe', NATIVE_CURRENCY_ID: 'Mockme2' }, - }, - ], - }, - target: 'target/tests/ComposeService-bootstrap.custom', - customPreset: './test/custom_preset.yml', - reset: false, - preset: Preset.bootstrap, - }; - await assertDockerCompose(params, 'expected-docker-compose-bootstrap-custom.yml'); - }); - - it('Compose bootstrap full with debug on', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - customPresetObject: { - dockerComposeDebugMode: true, - faucets: [ - { - environment: { FAUCET_PRIVATE_KEY: 'MockMe', NATIVE_CURRENCY_ID: 'Mockme2' }, - }, - ], - }, - target: 'target/tests/ComposeService-bootstrap.full', - password, - reset: false, - assembly: 'full', - preset: Preset.bootstrap, - }; - await assertDockerCompose(params, 'expected-docker-compose-bootstrap-full.yml'); - }); - - it('Compose bootstrap repeat', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - customPresetObject: { - faucets: [ - { - environment: { FAUCET_PRIVATE_KEY: 'MockMe', NATIVE_CURRENCY_ID: 'Mockme2' }, - }, - ], - }, - reset: false, - target: 'target/tests/ComposeService-bootstrap.repeat', - password, - preset: Preset.bootstrap, - customPreset: './test/repeat_preset.yml', - }; - await assertDockerCompose(params, 'expected-docker-compose-bootstrap-repeat.yml'); - }); - - it('resolveDebugOptions', async () => { - const service = new ComposeService('.', ComposeService.defaultParams); - expect(service.resolveDebugOptions(true, true)).deep.equals(ComposeService.DEBUG_SERVICE_PARAMS); - expect(service.resolveDebugOptions(true, undefined)).deep.equals(ComposeService.DEBUG_SERVICE_PARAMS); - expect(service.resolveDebugOptions(true, false)).deep.equals({}); - expect(service.resolveDebugOptions(false, true)).deep.equals(ComposeService.DEBUG_SERVICE_PARAMS); - expect(service.resolveDebugOptions(false, undefined)).deep.equals({}); - expect(service.resolveDebugOptions(false, false)).deep.equals({}); - }); -}); diff --git a/test/service/ConfigLoader.test.ts b/test/service/ConfigLoader.test.ts deleted file mode 100644 index 6d11288ef..000000000 --- a/test/service/ConfigLoader.test.ts +++ /dev/null @@ -1,547 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from '@oclif/test'; -import 'mocha'; -import { Account, NetworkType } from 'symbol-sdk'; -import { ConfigAccount, PrivateKeySecurityMode } from '../../src/model'; -import { BootstrapUtils, ConfigLoader, KeyName, Preset } from '../../src/service'; - -class ConfigLoaderMocked extends ConfigLoader { - public generateAccount = ( - networkType: NetworkType, - securityMode: PrivateKeySecurityMode, - keyName: KeyName, - oldAccount: ConfigAccount | undefined, - privateKey: string | undefined, - publicKey: string | undefined, - ): ConfigAccount => super.generateAccount(networkType, securityMode, keyName, oldAccount, privateKey || 'a'.repeat(64), publicKey); -} - -describe('ConfigLoader', () => { - it('ConfigLoader loadPresetData testnet no assembly', async () => { - const configLoader = new ConfigLoaderMocked(); - try { - await configLoader.createPresetData({ - root: '.', - preset: Preset.testnet, - assembly: undefined, - customPreset: undefined, - customPresetObject: undefined, - password: 'abc', - }); - } catch (e) { - expect(e.message).to.equal('Preset testnet requires assembly (-a, --assembly option). Possible values are: api, dual, peer'); - return; - } - expect(true).to.be.false; - }); - - it('ConfigLoader loadPresetData testnet assembly', async () => { - const configLoader = new ConfigLoaderMocked(); - const presetData = await configLoader.createPresetData({ - root: '.', - preset: Preset.testnet, - assembly: 'dual', - customPreset: undefined, - customPresetObject: undefined, - password: 'abc', - }); - expect(presetData).to.not.be.undefined; - }); - - it('ConfigLoader loadPresetData bootstrap custom', async () => { - const configLoader = new ConfigLoaderMocked(); - const presetData = await configLoader.createPresetData({ - root: '.', - preset: Preset.bootstrap, - assembly: undefined, - customPreset: 'test/override-currency-preset.yml', - customPresetObject: undefined, - password: 'abcd', - }); - expect(presetData).to.not.be.undefined; - expect(presetData?.nemesis?.mosaics?.[0].accounts).to.be.eq(20); - const yaml = BootstrapUtils.toYaml(presetData); - expect(BootstrapUtils.fromYaml(yaml)).to.be.deep.eq(presetData); - }); - - it('ConfigLoader loadPresetData bootstrap custom too short!', async () => { - const configLoader = new ConfigLoaderMocked(); - try { - await configLoader.createPresetData({ - root: '.', - preset: Preset.bootstrap, - assembly: undefined, - customPreset: 'test/override-currency-preset.yml', - customPresetObject: undefined, - password: 'abc', - }); - } catch (e) { - expect(e.message).eq('Password is too short. It should have at least 4 characters!'); - } - }); - - it('applyIndex', async () => { - const configLoader = new ConfigLoaderMocked(); - const context = { $index: 10 }; - expect(configLoader.applyValueTemplate(context, 'hello')).to.be.eq('hello'); - expect(configLoader.applyValueTemplate(context, 'index')).to.be.eq('index'); - expect(configLoader.applyValueTemplate(context, '$index')).to.be.eq('$index'); - expect(configLoader.applyValueTemplate(context, '{{index}}')).to.be.eq(''); - expect(configLoader.applyValueTemplate(context, '{{$index}}')).to.be.eq('10'); - expect(configLoader.applyValueTemplate(context, '{{add $index 2}}')).to.be.eq('12'); - expect(configLoader.applyValueTemplate(context, '100.100.{{add $index 2}}')).to.be.eq('100.100.12'); - expect(configLoader.applyValueTemplate(context, '100.100.{{add $index 5}}')).to.be.eq('100.100.15'); - }); - - it('expandServicesRepeat when repeat 3', async () => { - const configLoader = new ConfigLoaderMocked(); - const services = [ - { - repeat: 3, - apiNodeName: 'api-node-{{$index}}', - apiNodeHost: 'api-node-{{$index}}', - apiNodeBrokerHost: 'api-node-broker-{{$index}}', - name: 'rest-gateway-{{$index}}', - description: 'catapult development network', - databaseHost: 'db-{{$index}}', - openPort: true, - ipv4_address: '172.20.0.{{add $index 5}}', - }, - ]; - - const expandedServices = configLoader.expandServicesRepeat({}, services); - - const expectedExpandedServices = [ - { - apiNodeName: 'api-node-0', - apiNodeHost: 'api-node-0', - apiNodeBrokerHost: 'api-node-broker-0', - name: 'rest-gateway-0', - description: 'catapult development network', - databaseHost: 'db-0', - openPort: true, - ipv4_address: '172.20.0.5', - }, - { - apiNodeName: 'api-node-1', - apiNodeHost: 'api-node-1', - apiNodeBrokerHost: 'api-node-broker-1', - name: 'rest-gateway-1', - description: 'catapult development network', - databaseHost: 'db-1', - openPort: true, - ipv4_address: '172.20.0.6', - }, - { - apiNodeName: 'api-node-2', - apiNodeHost: 'api-node-2', - apiNodeBrokerHost: 'api-node-broker-2', - name: 'rest-gateway-2', - description: 'catapult development network', - databaseHost: 'db-2', - openPort: true, - ipv4_address: '172.20.0.7', - }, - ]; - expect(expandedServices).to.be.deep.eq(expectedExpandedServices); - }); - - it('expandServicesRepeat when repeat 0', async () => { - const configLoader = new ConfigLoaderMocked(); - const services = [ - { - repeat: 0, - apiNodeName: 'api-node-{{$index}}', - apiNodeHost: 'api-node-{{$index}}', - apiNodeBrokerHost: 'api-node-broker-{{$index}}', - name: 'rest-gateway-{{$index}}', - description: 'catapult development network', - databaseHost: 'db-{{$index}}', - openPort: true, - ipv4_address: '172.20.0.{{add $index 5}}', - }, - ]; - - const expandedServices = configLoader.expandServicesRepeat({}, services); - - expect(expandedServices).to.be.deep.eq([]); - }); - - it('expandServicesRepeat when no repeat', async () => { - const configLoader = new ConfigLoaderMocked(); - const services = [ - { - apiNodeName: 'api-node-{{$index}}', - apiNodeHost: 'api-node-{{$index}}', - apiNodeBrokerHost: 'api-node-broker-{{$index}}', - name: 'rest-gateway-{{$index}}', - description: 'catapult development network', - databaseHost: 'db-{{$index}}', - openPort: true, - ipv4_address: '172.20.0.{{add $index 5}}', - }, - ]; - - const expandedServices = configLoader.expandServicesRepeat({}, services); - - const expectedExpandedServices = [ - { - apiNodeBrokerHost: 'api-node-broker-0', - apiNodeHost: 'api-node-0', - apiNodeName: 'api-node-0', - databaseHost: 'db-0', - description: 'catapult development network', - ipv4_address: '172.20.0.5', - name: 'rest-gateway-0', - openPort: true, - }, - ]; - expect(expandedServices).to.be.deep.eq(expectedExpandedServices); - }); - - it('applyValueTemplate when object', async () => { - const configLoader = new ConfigLoaderMocked(); - const value = { - _info: 'this file contains a list of api-node peers', - knownPeers: [ - { - publicKey: '46902d4a6136d43f8d78e3ab4494aee9b1da17886f6f0a698959714f96900bd6', - endpoint: { - host: 'api-node-0', - port: 7900, - }, - metadata: { - name: 'api-node-0', - roles: 'Api', - }, - }, - ], - }; - - expect(configLoader.applyValueTemplate({}, value)).to.be.deep.eq(value); - expect(configLoader.applyValueTemplate({}, BootstrapUtils.fromYaml(BootstrapUtils.toYaml(value)))).to.be.deep.eq(value); - }); - - it('applyValueTemplate when array', async () => { - const configLoader = new ConfigLoaderMocked(); - const value = [ - { - _info: 'this file contains a list of api-node peers', - knownPeers: [ - { - publicKey: '46902d4a6136d43f8d78e3ab4494aee9b1da17886f6f0a698959714f96900bd6', - endpoint: { - host: 'api-node-0', - port: 7900, - }, - metadata: { - name: 'api-node-0', - roles: 'Api', - }, - }, - ], - }, - ]; - - expect(configLoader.applyValueTemplate({}, value)).to.be.deep.eq(value); - expect(configLoader.applyValueTemplate({}, BootstrapUtils.fromYaml(BootstrapUtils.toYaml(value)))).to.be.deep.eq(value); - }); - - it('should migrated old addresses', () => { - const configLoader = new ConfigLoaderMocked(); - const oldAddresses = BootstrapUtils.loadYaml('./test/addresses/addresses-old.yml', false); - const newAddresses = BootstrapUtils.loadYaml('./test/addresses/addresses-new.yml', false); - const addresses = configLoader.migrateAddresses(oldAddresses, NetworkType.TEST_NET); - expect(addresses).to.be.deep.eq(newAddresses); - }); - - it('should migrated not migrate new addresses', () => { - const configLoader = new ConfigLoaderMocked(); - const newAddresses = BootstrapUtils.loadYaml('./test/addresses/addresses-new.yml', false); - const addresses = configLoader.migrateAddresses(newAddresses, NetworkType.TEST_NET); - expect(addresses).to.be.deep.eq(newAddresses); - }); - - it('should generateAccount when old and new are different', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.ENCRYPT; - const oldAccount = Account.generateNewAccount(networkType); - const newAccount = Account.generateNewAccount(networkType); - const account = configLoader.generateAccount( - networkType, - securityMode, - KeyName.Main, - { - publicKey: oldAccount.publicKey, - address: oldAccount.address.plain(), - privateKey: oldAccount.privateKey, - }, - newAccount.privateKey, - newAccount.publicKey, - ); - expect(account).deep.eq({ - publicKey: newAccount.publicKey, - address: newAccount.address.plain(), - privateKey: newAccount.privateKey, - }); - }); - - it('should generateAccount when old and new are different', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.ENCRYPT; - const oldAccount = Account.generateNewAccount(networkType); - const newAccount = Account.generateNewAccount(networkType); - const account = configLoader.generateAccount( - networkType, - securityMode, - KeyName.Main, - { - publicKey: oldAccount.publicKey, - address: oldAccount.address.plain(), - privateKey: oldAccount.privateKey, - }, - newAccount.privateKey, - newAccount.publicKey, - ); - expect(account).deep.eq({ - publicKey: newAccount.publicKey, - address: newAccount.address.plain(), - privateKey: newAccount.privateKey, - }); - }); - - it('should generateAccount when old and new are same', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.ENCRYPT; - const oldAccount = Account.generateNewAccount(networkType); - const newAccount = oldAccount; - const account = configLoader.generateAccount( - networkType, - securityMode, - KeyName.Main, - { - publicKey: oldAccount.publicKey, - address: oldAccount.address.plain(), - privateKey: oldAccount.privateKey, - }, - newAccount.privateKey, - newAccount.publicKey, - ); - expect(account).deep.eq({ - publicKey: newAccount.publicKey, - address: newAccount.address.plain(), - privateKey: newAccount.privateKey, - }); - }); - - it('should generateAccount when old and new are same, new no private eky', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.ENCRYPT; - const oldAccount = Account.generateNewAccount(networkType); - const newAccount = oldAccount; - const account = configLoader.generateAccount( - networkType, - securityMode, - KeyName.Main, - { - publicKey: oldAccount.publicKey, - address: oldAccount.address.plain(), - privateKey: oldAccount.privateKey, - }, - undefined, - newAccount.publicKey, - ); - expect(account).deep.eq({ - publicKey: newAccount.publicKey, - address: newAccount.address.plain(), - privateKey: newAccount.privateKey, - }); - }); - - it('should generateAccount when old and new are same, old no private eky', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.ENCRYPT; - const oldAccount = Account.generateNewAccount(networkType); - const newAccount = oldAccount; - const account = configLoader.generateAccount( - networkType, - securityMode, - KeyName.Main, - { - publicKey: oldAccount.publicKey, - address: oldAccount.address.plain(), - }, - newAccount.privateKey, - newAccount.publicKey, - ); - expect(account).deep.eq({ - publicKey: newAccount.publicKey, - address: newAccount.address.plain(), - privateKey: newAccount.privateKey, - }); - }); - - it('should generateAccount when old and new are same, old private key', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.ENCRYPT; - const oldAccount = Account.generateNewAccount(networkType); - const newAccount = oldAccount; - const account = configLoader.generateAccount( - networkType, - securityMode, - KeyName.Main, - { - publicKey: oldAccount.publicKey, - address: oldAccount.address.plain(), - }, - undefined, - newAccount.publicKey, - ); - expect(account).deep.eq({ - publicKey: newAccount.publicKey, - address: newAccount.address.plain(), - }); - }); - - it('should generateAccount when old and new are different, no private key new', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.ENCRYPT; - const oldAccount = Account.generateNewAccount(networkType); - const newAccount = Account.generateNewAccount(networkType); - const account = configLoader.generateAccount( - networkType, - securityMode, - KeyName.Main, - { - publicKey: oldAccount.publicKey, - address: oldAccount.address.plain(), - privateKey: oldAccount.privateKey, - }, - undefined, - newAccount.publicKey, - ); - expect(account).deep.eq({ - publicKey: newAccount.publicKey, - address: newAccount.address.plain(), - }); - }); - - it('should generateAccount when old and new are different. No new account', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.ENCRYPT; - const oldAccount = Account.generateNewAccount(networkType); - const account = configLoader.generateAccount( - networkType, - securityMode, - KeyName.Main, - { - publicKey: oldAccount.publicKey, - address: oldAccount.address.plain(), - privateKey: oldAccount.privateKey, - }, - undefined, - undefined, - ); - expect(account).deep.eq({ - publicKey: oldAccount.publicKey, - address: oldAccount.address.plain(), - privateKey: oldAccount.privateKey, - }); - }); - - it('should generateAccount when old and new are different. No new account. Old without private', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.ENCRYPT; - const oldAccount = Account.generateNewAccount(networkType); - const account = configLoader.generateAccount( - networkType, - securityMode, - KeyName.Main, - { - publicKey: oldAccount.publicKey, - address: oldAccount.address.plain(), - }, - undefined, - undefined, - ); - expect(account).deep.eq({ - publicKey: oldAccount.publicKey, - address: oldAccount.address.plain(), - }); - }); - - it('should generateAccount brand new', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.ENCRYPT; - const account = configLoader.generateAccount(networkType, securityMode, KeyName.Main, undefined, undefined, undefined); - expect(account.address).not.undefined; - expect(account.privateKey).not.undefined; - expect(account.privateKey).not.undefined; - }); - - it('should generateAccount brand new on remote', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT; - const account = configLoader.generateAccount(networkType, securityMode, KeyName.Remote, undefined, undefined, undefined); - expect(account.address).not.undefined; - expect(account.privateKey).not.undefined; - expect(account.privateKey).not.undefined; - }); - - it('should generateAccount brand new on voting', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.PROMPT_MAIN; - const account = configLoader.generateAccount(networkType, securityMode, KeyName.Voting, undefined, undefined, undefined); - expect(account.address).not.undefined; - expect(account.privateKey).not.undefined; - expect(account.privateKey).not.undefined; - }); - - it('should generateAccount raise error new', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.PROMPT_MAIN; - expect(() => configLoader.generateAccount(networkType, securityMode, KeyName.Main, undefined, undefined, undefined)).throw; - }); - - it('should generateAccount raise error new', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT; - expect(() => configLoader.generateAccount(networkType, securityMode, KeyName.Transport, undefined, undefined, undefined)).throw; - }); - - it('should generateAccount raise error new', () => { - const configLoader = new ConfigLoader(); - const networkType = NetworkType.MIJIN_TEST; - const securityMode = PrivateKeySecurityMode.PROMPT_ALL; - expect(() => configLoader.generateAccount(networkType, securityMode, KeyName.Remote, undefined, undefined, undefined)).throw; - }); -}); diff --git a/test/service/ConfigService.test.ts b/test/service/ConfigService.test.ts deleted file mode 100644 index 2bbdd2e25..000000000 --- a/test/service/ConfigService.test.ts +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from '@oclif/test'; -import 'mocha'; -import { ConfigService, CryptoUtils, Preset } from '../../src/service'; - -describe('ConfigService', () => { - it('ConfigService default run with optin_preset.yml', async () => { - await new ConfigService('.', { - ...ConfigService.defaultParams, - reset: true, - target: 'target/tests/ConfigService.test.optin', - customPreset: './test/optin_preset.yml', - }).run(); - }); - - it('ConfigService default run with override-currency-preset.yml', async () => { - await new ConfigService('.', { - ...ConfigService.defaultParams, - reset: true, - target: 'target/tests/ConfigService.test.custom', - customPreset: './test/override-currency-preset.yml', - }).run(); - }); - - it('ConfigService testnet assembly', async () => { - await new ConfigService('.', { - ...ConfigService.defaultParams, - reset: true, - target: 'target/tests/ConfigService.test.testnet', - preset: Preset.testnet, - assembly: 'dual', - }).run(); - }); - - it('ConfigService mainnet assembly', async () => { - await new ConfigService('.', { - ...ConfigService.defaultParams, - reset: true, - target: 'target/tests/ConfigService.test.mainnet', - preset: Preset.mainnet, - assembly: 'dual', - }).run(); - }); - - it('ConfigService bootstrap default', async () => { - const configResult = await new ConfigService('.', { - ...ConfigService.defaultParams, - reset: true, - target: 'target/tests/bootstrap', - preset: Preset.bootstrap, - }).run(); - - const configResultUpgrade = await new ConfigService('.', { - ...ConfigService.defaultParams, - upgrade: true, - target: 'target/tests/bootstrap', - preset: Preset.bootstrap, - }).run(); - - expect(CryptoUtils.removePrivateKeys(configResultUpgrade.presetData)).deep.eq( - CryptoUtils.removePrivateKeys(configResult.presetData), - ); - }); - - it('ConfigService bootstrap repeat', async () => { - const configResult = await new ConfigService('.', { - ...ConfigService.defaultParams, - reset: true, - target: 'target/tests/ConfigService.bootstrap.repeat', - preset: Preset.bootstrap, - customPreset: './test/repeat_preset.yml', - }).run(); - - const assertRepeatedService = (expectedCount: number, services: any[] | undefined) => { - expect(services!.length).to.be.eq(expectedCount); - - services?.forEach((service) => { - Object.values(service).forEach((value) => { - expect((value + '').indexOf('index'), `'${value}' contains index!`).to.be.eq(-1); - }); - }); - }; - - assertRepeatedService(4, configResult.presetData.databases); - assertRepeatedService(7, configResult.presetData.nodes); - assertRepeatedService(4, configResult.presetData.gateways); - assertRepeatedService(4, configResult.presetData.databases); - }); - - it('ConfigService mainnet supernode assembly after upgrade', async () => { - const configResultInitial = await new ConfigService('.', { - ...ConfigService.defaultParams, - reset: true, - target: 'target/tests/ConfigService.mainnet.supernode', - preset: Preset.mainnet, - customPreset: 'test/unit-test-profiles/supernode.yml', - assembly: 'dual', - }).run(); - const configResultUpgrade = await new ConfigService('.', { - ...ConfigService.defaultParams, - upgrade: true, - target: 'target/tests/ConfigService.mainnet.supernode', - preset: Preset.mainnet, - assembly: 'dual', - }).run(); - expect(CryptoUtils.removePrivateKeys(configResultUpgrade.presetData)).deep.eq( - CryptoUtils.removePrivateKeys(configResultInitial.presetData), - ); - const configResultUpgradeSecond = await new ConfigService('.', { - ...ConfigService.defaultParams, - upgrade: true, - target: 'target/tests/ConfigService.mainnet.supernode', - }).run(); - - expect(CryptoUtils.removePrivateKeys(configResultUpgradeSecond.presetData)).deep.eq( - CryptoUtils.removePrivateKeys(configResultInitial.presetData), - ); - }); - - it('ConfigService testnet supernode assembly after upgrade', async () => { - const configResultInitial = await new ConfigService('.', { - ...ConfigService.defaultParams, - reset: true, - target: 'target/tests/ConfigService.testnet.supernode', - preset: Preset.testnet, - customPreset: 'test/unit-test-profiles/supernode.yml', - assembly: 'dual', - }).run(); - const configResultUpgrade = await new ConfigService('.', { - ...ConfigService.defaultParams, - upgrade: true, - target: 'target/tests/ConfigService.testnet.supernode', - preset: Preset.testnet, - assembly: 'dual', - }).run(); - expect(CryptoUtils.removePrivateKeys(configResultUpgrade.presetData)).deep.eq( - CryptoUtils.removePrivateKeys(configResultInitial.presetData), - ); - const configResultUpgradeSecond = await new ConfigService('.', { - ...ConfigService.defaultParams, - upgrade: true, - target: 'target/tests/ConfigService.testnet.supernode', - }).run(); - - expect(CryptoUtils.removePrivateKeys(configResultUpgradeSecond.presetData)).deep.eq( - CryptoUtils.removePrivateKeys(configResultInitial.presetData), - ); - }); -}); diff --git a/test/service/ExperimentalCertificateService.test.ts b/test/service/ExperimentalCertificateService.test.ts deleted file mode 100644 index 4f5863ef8..000000000 --- a/test/service/ExperimentalCertificateService.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from '@oclif/test'; -import 'mocha'; -import * as sshpk from 'sshpk'; -import { Account, Convert, NetworkType } from 'symbol-sdk'; - -const anySshpk = sshpk as any; -describe('sshpk', () => { - it('sshpk certificate generated', async () => { - const hex = 'CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD'; - - const keyText = `-----BEGIN PRIVATE KEY----- -MC4CAQAwBQYDK2VwBCIEIMqC562vercppUYqG9WqeGMjkGNJBKZOsbsiKV4uGhvd ------END PRIVATE KEY----- -`; - - const key = anySshpk.parsePrivateKey(keyText); - const privateKey = Convert.uint8ToHex(key.part.k.data); - const publicKey = Convert.uint8ToHex(key.toPublic().part.A.data); - expect(hex).eq(privateKey); - console.log(key.toPublic().toString('pem')); - expect(publicKey).eq(Account.createFromPrivateKey(privateKey, NetworkType.MIJIN_TEST).publicKey); - // - // const object = createSelfSignedCertificate({ subject: 'adsf' } as any, key, { lifetime: 7300 * 86400 }); - // console.log(object); - }); -}); - -describe('ForgeCertificateService', () => { - it('certificate generated', async () => { - // const der = readFileSync('ca.der', { encoding: 'binary' }); - // const asn1 = forge.asn1.fromDer(der); - // const publicKey = forge.pki.publicKeyFromAsn1(asn1); - // const pem = forge.pki.publicKeyToPem(publicKey); - // console.log(pem); - - const key = `-----BEGIN PRIVATE KEY----- -MC4CAQAwBQYDK2VwBCIEIMqC562vercppUYqG9WqeGMjkGNJBKZOsbsiKV4uGhvd ------END PRIVATE KEY----- -`; - - // const privateKey = forge.pki.privateKeyFromPem(key); - // const message = 'abc'; - // const buffer = forge.util.createBuffer(message, 'utf8'); - // const binaryString = buffer.getBytes(); - // - // console.log(binaryString); - - // const privateKey = 'CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD'; - // const derFile = 'ca.der'; - // BootstrapUtils.createDerFile(privateKey, derFile); - // await BootstrapUtils.exec('cat ca.der | openssl pkey -inform DER -outform PEM -out ca.key.pem'); - // - // const forgePrivateKey = forge.pki.decryptRsaPrivateKey(await BootstrapUtils.readTextFile('ca.key.pem')); - - // const der = readFileSync(derFile, { encoding: 'binary' }); - // const asn1 = forge.asn1.fromDer(der); - // const privateKeyDer = forge.pki.privateKeyToAsn1(asn1 as forge.pki.PrivateKey); - - // const privateKeyObject = forge.pki.decryptRsaPrivateKey(derFile); - // const ed25519 = forge.pki.ed25519; - // const keypair = ed25519.generateKeyPair(); - // console.log(keypair.privateKey); - // `keypair.publicKey` is a node.js Buffer or Uint8Array - // `keypair.privateKey` is a node.js Buffer or Uint8Array - }); -}); diff --git a/test/service/NetworkPresetUpgrade.test.ts b/test/service/NetworkPresetUpgrade.test.ts deleted file mode 100644 index 77a246a85..000000000 --- a/test/service/NetworkPresetUpgrade.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2021 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { it } from 'mocha'; -import { ConfigPreset } from '../../src/model'; -import { BootstrapUtils, Preset, RemoteNodeService } from '../../src/service'; - -describe('NetworkPresetUpgrade', () => { - const patchNetworkPreset = async (preset: Preset): Promise => { - const root = './'; - const presetLocation = `${root}/presets/${preset}/network.yml`; - const networkPreset: ConfigPreset = BootstrapUtils.loadYaml(presetLocation, false); - - const epoch = await new RemoteNodeService().getBestFinalizationEpoch(networkPreset.knownRestGateways); - if (!epoch) { - throw new Error('Epoch could not be resolved!!'); - } - networkPreset.lastKnownNetworkEpoch = epoch; - await BootstrapUtils.writeYaml(presetLocation, networkPreset, undefined); - }; - it('should patch testnet lastKnownNetworkEpoch', () => { - return patchNetworkPreset(Preset.testnet); - }); - it('should patch mainnet lastKnownNetworkEpoch', () => { - return patchNetworkPreset(Preset.mainnet); - }); -}); diff --git a/test/service/ReportService.test.ts b/test/service/ReportService.test.ts deleted file mode 100644 index f4a228486..000000000 --- a/test/service/ReportService.test.ts +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from '@oclif/test'; -import { existsSync } from 'fs'; -import 'mocha'; -import { join } from 'path'; -import { CustomPreset } from '../../src/model'; -import { BootstrapUtils, ConfigParams, ConfigService, Preset, ReportService } from '../../src/service'; - -describe('ReportService', () => { - const assertReport = async (params: ConfigParams, expectedReportsFolder: string): Promise => { - const configResult = await new ConfigService('.', params).run(); - - const paths = await new ReportService('.', params).run(configResult.presetData); - const expectedReportFolder = `./test/reports/${expectedReportsFolder}`; - await BootstrapUtils.mkdir(expectedReportFolder); - - const promises = paths.map(async (reportPath) => { - expect(reportPath.indexOf(`${params.target}/report`)).to.be.greaterThan(-1); - const generatedReport = (await BootstrapUtils.readTextFile(reportPath)).replace(BootstrapUtils.VERSION, 'CURRENT_VERSION'); - const expectedReportPath = join(expectedReportFolder, reportPath.replace(/^.*[\\\/]/, '')); - if (!existsSync(expectedReportPath)) { - await BootstrapUtils.writeTextFile(expectedReportPath, generatedReport.trim()); - } - const expectedReport = await BootstrapUtils.readTextFile(expectedReportPath); - expect( - generatedReport.trim(), - `Report ${reportPath} doesn't match - -`, - ).to.be.eq(expectedReport.trim()); - }); - - for (const gateway of configResult.presetData.gateways || []) { - const currentRestJsonFile = BootstrapUtils.getTargetGatewayFolder(params.target, true, gateway.name, 'rest.json'); - const currentRestJson = await BootstrapUtils.readTextFile(currentRestJsonFile); - const expectedRestJsonFile = join(expectedReportFolder, `${gateway.name}-rest.json`); - if (!existsSync(expectedRestJsonFile)) { - await BootstrapUtils.writeTextFile(expectedRestJsonFile, currentRestJson); - } - const expectedRestJson = await BootstrapUtils.readTextFile(expectedRestJsonFile); - expect( - currentRestJson.trim(), - `Rest ${currentRestJsonFile} doesn't match - -`, - ).to.be.eq(expectedRestJson.trim()); - } - - await Promise.all(promises); - }; - - it('ReportService testnet dual voting report', async () => { - const target = 'target/tests/ReportService.testnet.voting.report'; - const customPresetObject: CustomPreset = { - restDeploymentToolLastUpdatedDate: '2021-05-23', - gateways: [ - { - restDeploymentToolLastUpdatedDate: '2021-05-22', - restDeploymentToolVersion: 'abc', - }, - ], - nodes: [ - { - mainPrivateKey: 'CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD', - voting: true, - friendlyName: 'myFriendlyName', - }, - ], - }; - const params = { - ...ConfigService.defaultParams, - upgrade: true, - preset: Preset.testnet, - customPresetObject: customPresetObject, - assembly: 'dual', - target: target, - report: true, - }; - - await assertReport(params, 'testnet-dual-voting'); - }); - - it('ReportService testnet peer voting report', async () => { - const target = 'target/tests/ReportService.testnet.peer.voting.report'; - const customPresetObject: CustomPreset = { - restDeploymentToolLastUpdatedDate: '2021-05-23', - nodes: [ - { - mainPrivateKey: 'CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD', - voting: true, - friendlyName: 'myFriendlyName', - }, - ], - }; - const params = { - ...ConfigService.defaultParams, - upgrade: true, - preset: Preset.testnet, - customPresetObject: customPresetObject, - assembly: 'peer', - target: target, - report: true, - }; - - await assertReport(params, 'testnet-peer-voting'); - }); - - it('ReportService testnet peer voting non harvesting report', async () => { - const target = 'target/tests/ReportService.testnet.peer.non.harvesting.voting.report'; - const customPresetObject: CustomPreset = { - nodes: [ - { - mainPrivateKey: 'CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD', - voting: true, - harvesting: false, - friendlyName: 'myFriendlyName', - }, - ], - }; - const params = { - ...ConfigService.defaultParams, - upgrade: true, - preset: Preset.testnet, - customPresetObject: customPresetObject, - assembly: 'peer', - target: target, - report: true, - }; - - await assertReport(params, 'testnet-peer-non-harvesting-voting'); - }); - - it('ReportService testnet api', async () => { - const target = 'target/tests/ReportService.testnet.api.report'; - const customPresetObject: CustomPreset = { - restDeploymentToolLastUpdatedDate: '2021-05-23', - restDeploymentToolVersion: 'ABC', - nodes: [ - { - mainPrivateKey: 'CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD', - voting: false, - friendlyName: 'myFriendlyName', - }, - ], - }; - const params = { - ...ConfigService.defaultParams, - upgrade: true, - preset: Preset.testnet, - customPresetObject: customPresetObject, - assembly: 'api', - target: target, - report: true, - }; - - await assertReport(params, 'testnet-api'); - }); - - it('ReportService mainnet peer', async () => { - const target = 'target/tests/ReportService.mainnet.peer.report'; - const customPresetObject: CustomPreset = { - nodes: [ - { - mainPrivateKey: 'CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD', - voting: false, - friendlyName: 'myFriendlyName', - }, - ], - }; - const params = { - ...ConfigService.defaultParams, - upgrade: true, - preset: Preset.mainnet, - customPresetObject: customPresetObject, - assembly: 'peer', - target: target, - report: true, - }; - - await assertReport(params, 'mainnet-peer'); - }); - - it('ReportService mainnet dual', async () => { - const target = 'target/tests/ReportService.mainnet.dual.report'; - const customPresetObject: CustomPreset = { - restDeploymentToolLastUpdatedDate: '2021-05-23', - restDeploymentToolVersion: 'abc', - nodes: [ - { - mainPrivateKey: 'CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD', - voting: false, - friendlyName: 'myFriendlyName', - }, - ], - }; - const params = { - ...ConfigService.defaultParams, - upgrade: true, - preset: Preset.mainnet, - customPresetObject: customPresetObject, - assembly: 'dual', - target: target, - report: true, - }; - - await assertReport(params, 'mainnet-dual'); - }); - - it('ReportService mainnet dual voting', async () => { - const target = 'target/tests/ReportService.mainnet.dual.voting.report'; - const customPresetObject: CustomPreset = { - restDeploymentToolLastUpdatedDate: '2021-05-23', - restDeploymentToolVersion: 'abc', - nodes: [ - { - mainPrivateKey: 'CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD', - voting: true, - friendlyName: 'myFriendlyName', - }, - ], - }; - const params = { - ...ConfigService.defaultParams, - upgrade: true, - preset: Preset.mainnet, - customPresetObject: customPresetObject, - assembly: 'dual', - target: target, - report: true, - }; - - await assertReport(params, 'mainnet-dual-voting'); - }); - - it('ReportService bootstrap report', async () => { - const target = 'target/tests/ReportService.bootstrap.voting.report'; - const customPresetObject: CustomPreset = { - restDeploymentToolLastUpdatedDate: '2021-05-23', - restDeploymentToolVersion: 'abc', - nemesisGenerationHashSeed: '6AF8E35BBC7AC341E7931B39E2C9A591EDBE9F9111996053E6771D48E9C53B31', - nemesis: { - nemesisSignerPrivateKey: 'AA0863BDB0C2C275EE8CADECC8FAF01CAF632A2D6E1DE9ECB58917F65C89B204', - }, - harvestNetworkFeeSinkAddress: 'TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q', - mosaicRentalFeeSinkAddress: 'TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q', - namespaceRentalFeeSinkAddress: 'TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q', - nodes: [ - { - voting: true, - friendlyName: 'my-peer-node-{{$index}}', - }, - { - friendlyName: 'my-api-node-{{$index}}', - }, - ], - }; - const params = { - ...ConfigService.defaultParams, - upgrade: true, - preset: Preset.bootstrap, - customPresetObject: customPresetObject, - target: target, - report: true, - }; - - await assertReport(params, 'bootstrap-voting'); - }); -}); diff --git a/test/service/RewardProgramService.test.ts b/test/service/RewardProgramService.test.ts deleted file mode 100644 index 8799e91ac..000000000 --- a/test/service/RewardProgramService.test.ts +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2020 NEM - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from '@oclif/test'; -import 'mocha'; -import { Deadline, TransactionType, TransferTransaction, UInt64 } from 'symbol-sdk'; -import { BootstrapService, ConfigService, LinkService, Preset } from '../../src/service'; -import { RewardProgram, RewardProgramService, RewardProgramServiceTransactionFactoryParams } from '../../src/service/RewardProgramService'; - -const password = '1234'; -describe('RewardProgramService', () => { - it('getRewardProgram', async () => { - expect(RewardProgramService.getRewardProgram('ecosystem')).eq(RewardProgram.Ecosystem); - expect(RewardProgramService.getRewardProgram('Ecosystem')).eq(RewardProgram.Ecosystem); - expect(RewardProgramService.getRewardProgram('superNODE')).eq(RewardProgram.SuperNode); - expect(RewardProgramService.getRewardProgram('earlyAdoption')).eq(RewardProgram.EarlyAdoption); - try { - RewardProgramService.getRewardProgram('NA'); - expect(1).eq(0); - } catch (e) { - expect(e.message).eq('NA is not a valid Reward program. Please use one of EarlyAdoption, Ecosystem, SuperNode, MonitorOnly'); - } - }); - - it('RewardProgramService create transactions when supernode', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - target: 'target/tests/testnet-supernode', - password, - reset: false, - preset: Preset.testnet, - customPreset: './test/unit-test-profiles/supernode.yml', - customPresetObject: { - nodeUseRemoteAccount: true, - }, - assembly: 'dual', - }; - const { addresses, presetData } = await new BootstrapService('.').config(params); - const maxFee = UInt64.fromUint(10); - const nodeAccount = addresses.nodes![0]; - const nodePreset = presetData.nodes![0]; - const transactionFactoryParams: RewardProgramServiceTransactionFactoryParams = { - presetData, - deadline: Deadline.create(1), - nodePreset: nodePreset, - nodeAccount: nodeAccount, - maxFee: maxFee, - }; - - const transactions = await new RewardProgramService(params).createTransactions(transactionFactoryParams); - expect(transactions.length).eq(1); - const transaction = transactions[0] as TransferTransaction; - expect(transaction.type).eq(TransactionType.TRANSFER); - expect(transaction.message.payload).eq( - 'enroll https://fboucquez-agent-symbollocal.ngrok.io LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlHU01FWUNBUUF3RXpFUk1BOEdBMVVFQXd3SVFXZGxiblFnUTBFd0tqQUZCZ01yWlhBRElRQmtJVU1VTjJMSQpKMWcraW1TQW0zM3lkNDRVSlhWdjVkZi95Z0N6eGJVbUc2QUFNQVVHQXl0bGNBTkJBTncyWlIvQUtxUzlSblJWCnMzYWtZcXdHMnAzR0RTREQzVlU3VDFOSk9MWkdiU3g3alY2WnovS2ZzMGgvcEsyRmhvb2taL2oxeUxUQzgxdEkKZzR6MWFnWT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCg==', - ); - }); - - it('Supernode create transactions when dual + voting, not supernode', async () => { - const params = { - ...ConfigService.defaultParams, - ...LinkService.defaultParams, - target: 'target/tests/testnet-dual-voting', - password, - reset: false, - preset: Preset.testnet, - customPreset: './test/unit-test-profiles/voting_preset.yml', - customPresetObject: { - nodeUseRemoteAccount: true, - }, - assembly: 'dual', - }; - const { addresses, presetData } = await new BootstrapService('.').config(params); - const maxFee = UInt64.fromUint(10); - const nodeAccount = addresses.nodes![0]; - const nodePreset = presetData.nodes![0]; - const transactionFactoryParams: RewardProgramServiceTransactionFactoryParams = { - presetData, - deadline: Deadline.create(1), - nodePreset: nodePreset, - nodeAccount: nodeAccount, - maxFee: maxFee, - }; - - const transactions = await new RewardProgramService(params).createTransactions(transactionFactoryParams); - expect(transactions.length).eq(0); - }); -}); diff --git a/test/supernode.yml b/test/supernode.yml deleted file mode 100644 index 1d021f4ff..000000000 --- a/test/supernode.yml +++ /dev/null @@ -1,20 +0,0 @@ -#privateKeySecurityMode: PROMPT_MAIN -nodeUseRemoteAccount: true -logLevel: 'Debug' -#lastKnownNetworkEpoch: 70 -votingKeyDesiredLifetime: 28 # create short voting key files, 28 is the minimun -#votingKeyDesiredFutureLifetime: 300 # create files for at least 60 epochs in the future, this will create voting key file 2 and file 3 -useExperimentalNativeVotingKeyGeneration: true # Use new native ts generation -symbolServerImage: symbolplatform/symbol-server-private:gcc-voting-key-unlink-rollback-f2633f4a4c -symbolRestImage: 'symbolplatform/symbol-rest:2.3.6-alpha' -nodes: - - voting: true - rewardProgram: 'supernode' - host: fboucquez-agent-symbollocal.ngrok.io - agentUrl: https://fboucquez-agent-symbollocal.ngrok.io - restGatewayUrl: http://fboucquez-rest-gateway-symbollocal.ngrok.io - mainPrivateKey: E095162875BB1D98CA5E0941670E01C1B0DBDF86DF7B3BEDA4A93635F8E51A03 - transportPrivateKey: 415F253ABF0FB2DFD39D7F409EFA2E88769873CAEB45617313B98657A1476A15 - remotePrivateKey: 24B485712045FEDA5782ECFF1752F63D41C134371BB46AC68EE6DC9183CF5061 - vrfPrivateKey: D34A231C860EB1B6E3A4F8366C8F0F6C7C2462A40263DCB67124FB76CDD4E368 - agentPrivateKey: AAAA231C860EB1B6E3A4F8366C8F0F6C7C2462A40263DCB67124FB76CDD4E368 diff --git a/test/unit-test-profiles/supernode.yml b/test/unit-test-profiles/supernode.yml deleted file mode 100644 index a3a21a147..000000000 --- a/test/unit-test-profiles/supernode.yml +++ /dev/null @@ -1,12 +0,0 @@ -privateKeySecurityMode: PROMPT_MAIN -nodes: - - voting: true - rewardProgram: 'supernode' - host: fboucquez-agent-symbollocal.ngrok.io - agentUrl: https://fboucquez-agent-symbollocal.ngrok.io - restGatewayUrl: http://fboucquez-rest-gateway-symbollocal.ngrok.io - mainPrivateKey: CA82E7ADAF7AB729A5462A1BD5AA78632390634904A64EB1BB22295E2E1A1BDD - transportPrivateKey: 6154154096354BC3DB522174ACD8BFE553893A0991BD5D105599846F17A3383B - remotePrivateKey: EFE3F0EF0AB368B8D7AC194D52A8CCFA2D5050B80B9C76E4D2F4D4BF2CD461C1 - vrfPrivateKey: F3C24C153783B683E40FB2671493B54480370BF4E3AB8027D4BF1293E14EB9B8 - agentPrivateKey: AAAA231C860EB1B6E3A4F8366C8F0F6C7C2462A40263DCB67124FB76CDD4E368 diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 000000000..7b2d79dbd --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,74 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + "lib": [ + "dom", + "es2017" + ] /* Specify library files to be included in the compilation. */, + "allowJs": false /* Allow javascript files to be compiled. */, + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "declaration": true /* Generates corresponding '.d.ts' file. */, + "declarationMap": true /* Generates a sourcemap for each corresponding '.d.ts' file. */, + "sourceMap": true /* Generates corresponding '.map' file. */, + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "lib" /* Redirect output structure to the directory. */, + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + "removeComments": true /* Do not emit comments to output. */, + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + + /* Module Resolution Options */ + "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, + "baseUrl": "./" /* Base directory to resolve non-absolute module names. */, + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "resolveJsonModule": true /* Include modules imported with '.json' extension */, + "skipLibCheck": true /* Skip type checking of declaration files. */, + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + } +} diff --git a/tsconfig.json b/tsconfig.json index b4c5d7686..5d43e0c0d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,15 @@ { - "compilerOptions": { - "declaration": true, - "importHelpers": true, - "module": "commonjs", - "outDir": "lib", - "rootDir": "src", - "strict": true, - "target": "es2017" - }, - "include": [ - "src/**/*" - ] + "extends": "./tsconfig.build.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "symbol-bootstrap-core": ["packages/bootstrap-core/src"], + "symbol-network-core": ["packages/network-core/src"], + "symbol-bootstrap": ["packages/bootstrap-cli/src"], + "symbol-network": ["packages/network-cli/src"] + }, + "esModuleInterop": true, + "skipLibCheck": true, + "types": [] + } }